Skip to content

Commit 5e74930

Browse files
committed
Add missing tests and models for go-pg/pg/orm.Formatter
1 parent 3c8182b commit 5e74930

4 files changed

Lines changed: 73 additions & 2 deletions

File tree

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
extensions:
2+
- addsTo:
3+
pack: codeql/go-all
4+
extensible: summaryModel
5+
data:
6+
- ["github.com/go-pg/pg/$ANYVERSION/orm", "Formatter", True, "Append", "", "", "Argument[1]", "ReturnValue", "taint", "manual"]
7+
- ["github.com/go-pg/pg/$ANYVERSION/orm", "Formatter", True, "Append", "", "", "Argument[1]", "Argument[0]", "taint", "manual"]
8+
- ["github.com/go-pg/pg/$ANYVERSION/orm", "Formatter", True, "AppendBytes", "", "", "Argument[1]", "ReturnValue", "taint", "manual"]
9+
- ["github.com/go-pg/pg/$ANYVERSION/orm", "Formatter", True, "AppendBytes", "", "", "Argument[1]", "Argument[0]", "taint", "manual"]
10+
- ["github.com/go-pg/pg/$ANYVERSION/orm", "Formatter", True, "FormatQuery", "", "", "Argument[1]", "ReturnValue", "taint", "manual"]
11+
- ["github.com/go-pg/pg/$ANYVERSION/orm", "Formatter", True, "FormatQuery", "", "", "Argument[1]", "Argument[0]", "taint", "manual"]

go/ql/test/library-tests/semmle/go/frameworks/SQL/QueryString.ql

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,3 +32,32 @@ class QueryString extends InlineExpectationsTest {
3232
)
3333
}
3434
}
35+
36+
class Config extends TaintTracking::Configuration {
37+
Config() { this = "pg-orm config" }
38+
39+
override predicate isSource(DataFlow::Node n) {
40+
n.asExpr() instanceof StringLit
41+
}
42+
43+
override predicate isSink(DataFlow::Node n) {
44+
n = any(DataFlow::CallNode cn | cn.getTarget().getName() = "sink").getAnArgument()
45+
}
46+
}
47+
48+
class TaintFlow extends InlineExpectationsTest {
49+
TaintFlow() { this = "pg-orm flow" }
50+
51+
override string getARelevantTag() { result = "flowfrom" }
52+
53+
override predicate hasActualResult(Location location, string element, string tag, string value) {
54+
tag = "flowfrom" and
55+
element = "" and
56+
exists(Config c, DataFlow::Node fromNode, DataFlow::Node toNode |
57+
toNode.hasLocationInfo(location.getFile().getAbsolutePath(), location.getStartLine(),
58+
location.getStartColumn(), location.getEndLine(), location.getEndColumn()) and
59+
c.hasFlow(fromNode, toNode) and
60+
value = fromNode.asExpr().(StringLit).getValue()
61+
)
62+
}
63+
}

go/ql/test/library-tests/semmle/go/frameworks/SQL/pg.go

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ func newpgtest(query string, conn newpg.Conn, db newpg.DB, tx newpg.Tx) {
2828
db.Prepare(query) // $ querystring=query
2929
tx.Prepare(query) // $ querystring=query
3030
}
31+
32+
func sink(x interface{}) { }
33+
3134
func pgormtest(query string, q orm.Query) {
3235
orm.Q(query) // $ querystring=query
3336
q.ColumnExpr(query) // $ querystring=query
@@ -38,4 +41,16 @@ func pgormtest(query string, q orm.Query) {
3841
q.Where(query) // $ querystring=query
3942
q.WhereInMulti(query) // $ querystring=query
4043
q.WhereOr(query) // $ querystring=query
41-
}
44+
45+
var formatter orm.Formatter
46+
var sink1 []byte
47+
48+
sink2 := formatter.Append(sink1, "Appended1")
49+
sink3 := formatter.AppendBytes(sink1, []byte("Appended2"))
50+
sink4 := formatter.FormatQuery(sink1, "Query")
51+
52+
sink(sink1) // $ flowfrom=Appended1 $ flowfrom=Appended2 $ flowfrom=Query
53+
sink(sink2) // $ flowfrom=Appended1
54+
sink(sink3) // $ flowfrom=Appended2
55+
sink(sink4) // $ flowfrom=Query
56+
}

go/ql/test/library-tests/semmle/go/frameworks/SQL/vendor/github.com/go-pg/pg/orm/stub.go

Lines changed: 17 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)