Skip to content

Commit da4049e

Browse files
committed
Go: Migrate AppenderOrSprinter model to models-as-data
1 parent 6b8ed7e commit da4049e

File tree

4 files changed

+30
-4
lines changed

4 files changed

+30
-4
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
---
2+
category: deprecated
3+
---
4+
* The class `Fmt::AppenderOrSprinter` of the `Fmt.qll` module has been deprecated. Use the new `Fmt::AppenderOrSprinterFunc` class instead. Its taint flow features have been migrated to models-as-data.

go/ql/lib/ext/fmt.model.yml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,14 @@ extensions:
88
- ["fmt", "ScanState", True, "Token", "", "", "Argument[-1]", "ReturnValue[0]", "taint", "manual"]
99
- ["fmt", "State", True, "Write", "", "", "Argument[0]", "Argument[-1]", "taint", "manual"]
1010
- ["fmt", "Stringer", True, "String", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
11+
- ["fmt", "", True, "Append", "", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "manual"]
12+
- ["fmt", "", True, "Append", "", "", "Argument[1].ArrayElement", "ReturnValue", "taint", "manual"]
13+
- ["fmt", "", True, "Appendf", "", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "manual"]
14+
- ["fmt", "", True, "Appendf", "", "", "Argument[1]", "ReturnValue", "taint", "manual"]
15+
- ["fmt", "", True, "Appendf", "", "", "Argument[2].ArrayElement", "ReturnValue", "taint", "manual"]
16+
- ["fmt", "", True, "Appendln", "", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "manual"]
17+
- ["fmt", "", True, "Appendln", "", "", "Argument[1].ArrayElement", "ReturnValue", "taint", "manual"]
18+
- ["fmt", "", True, "Sprint", "", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "manual"]
19+
- ["fmt", "", True, "Sprintf", "", "", "Argument[0]", "ReturnValue", "taint", "manual"]
20+
- ["fmt", "", True, "Sprintf", "", "", "Argument[1].ArrayElement", "ReturnValue", "taint", "manual"]
21+
- ["fmt", "", True, "Sprintln", "", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "manual"]

go/ql/lib/semmle/go/frameworks/stdlib/Fmt.qll

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,28 @@ import go
77
// Some TaintTracking::FunctionModel subclasses remain because varargs functions don't work with Models-as-Data sumamries yet.
88
/** Provides models of commonly used functions in the `fmt` package. */
99
module Fmt {
10-
/** The `Sprint` or `Append` functions or one of their variants. */
11-
class AppenderOrSprinter extends TaintTracking::FunctionModel {
10+
/**
11+
* The `Sprint` or `Append` functions or one of their variants.
12+
*
13+
* DEPRECATED: Use AppenderOrSprinterFunc.
14+
*/
15+
deprecated class AppenderOrSprinter extends TaintTracking::FunctionModel {
1216
AppenderOrSprinter() { this.hasQualifiedName("fmt", ["Append", "Sprint"] + ["", "f", "ln"]) }
1317

1418
override predicate hasTaintFlow(FunctionInput inp, FunctionOutput outp) {
1519
inp.isParameter(_) and outp.isResult()
1620
}
1721
}
1822

23+
/** The `Sprint` or `Append` functions or one of their variants. */
24+
class AppenderOrSprinterFunc extends Function {
25+
AppenderOrSprinterFunc() {
26+
this.hasQualifiedName("fmt", ["Append", "Sprint"] + ["", "f", "ln"])
27+
}
28+
}
29+
1930
/** The `Sprint` function or one of its variants. */
20-
class Sprinter extends AppenderOrSprinter {
31+
class Sprinter extends AppenderOrSprinterFunc {
2132
Sprinter() { this.getName().matches("Sprint%") }
2233
}
2334

go/ql/src/Security/CWE-352/ConstantOauth2State.ql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ module PrivateUrlFlowsToAuthCodeUrlCallConfig implements DataFlow::ConfigSig {
9999
or
100100
// Propagate across Sprintf and similar calls
101101
exists(DataFlow::CallNode cn |
102-
cn.getACalleeIncludingExternals().asFunction() instanceof Fmt::AppenderOrSprinter
102+
cn.getACalleeIncludingExternals().asFunction() instanceof Fmt::AppenderOrSprinterFunc
103103
|
104104
pred = cn.getASyntacticArgument() and succ = cn.getResult()
105105
)

0 commit comments

Comments
 (0)