Skip to content

Commit 03d2dcd

Browse files
committed
unified: Add similar tests for implicit self
There are some spurious flows explained by the added TODO comment.
1 parent 93d641f commit 03d2dcd

3 files changed

Lines changed: 89 additions & 2 deletions

File tree

unified/ql/lib/codeql/unified/internal/dataflow/DataFlowNode.qll

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ predicate performsVariableAccess(
2727
or
2828
hasIncomingValueAtCfgNode(access, cfgNode) and kind.isWrite()
2929
or
30+
// TODO: Make the SSA library use this CFG node for post-updates. It currently picks the same as the read.
3031
hasPostUpdate(access, cfgNode) and kind.isPostUpdate()
3132
)
3233
or

unified/ql/test/library-tests/dataflow/implicit-self.swift

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,4 +53,32 @@ class C {
5353
self.box.x = source("t8.1");
5454
sink(box.x); // $ hasValueFlow=t8.1
5555
}
56+
57+
func t9() {
58+
x = "safe";
59+
x += sink(x) + source("t9.1"); // $ SPURIOUS: hasTaintFlow=t9.1
60+
sink(x); // $ hasTaintFlow=t9.1
61+
sink(self.x); // $ hasTaintFlow=t9.1
62+
}
63+
64+
func t10() {
65+
x = "safe";
66+
self.x += sink(x) + source("t10.1"); // $ SPURIOUS: hasTaintFlow=t10.1
67+
sink(x); // $ hasTaintFlow=t10.1
68+
sink(self.x); // $ hasTaintFlow=t10.1
69+
}
70+
71+
func t11() {
72+
self.x = "safe";
73+
x += sink(x) + source("t11.1"); // $ SPURIOUS: hasTaintFlow=t11.1
74+
sink(x); // $ hasTaintFlow=t11.1
75+
sink(self.x); // $ hasTaintFlow=t11.1
76+
}
77+
78+
func t12() {
79+
self.x = "safe";
80+
self.x += sink(x) + source("t12.1"); // $ SPURIOUS: hasTaintFlow=t12.1
81+
sink(x); // $ hasTaintFlow=t12.1
82+
sink(self.x); // $ hasTaintFlow=t12.1
83+
}
5684
}

unified/ql/test/library-tests/dataflow/test.expected

Lines changed: 60 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,28 @@ edges
3232
| implicit-self.swift:53:9:53:18 | MemberAccessExpr | implicit-self.swift:53:9:53:16 | [post] MemberAccessExpr [x] | provenance | |
3333
| implicit-self.swift:53:22:53:35 | CallExpr | implicit-self.swift:53:9:53:18 | MemberAccessExpr | provenance | |
3434
| implicit-self.swift:54:14:54:16 | box [x] | implicit-self.swift:54:14:54:18 | MemberAccessExpr | provenance | |
35+
| implicit-self.swift:59:9:59:9 | [incoming] x | implicit-self.swift:59:19:59:19 | x | provenance | |
36+
| implicit-self.swift:59:9:59:9 | [incoming] x | implicit-self.swift:60:14:60:14 | x | provenance | |
37+
| implicit-self.swift:59:9:59:9 | [incoming] x | implicit-self.swift:61:14:61:17 | self [x] | provenance | |
38+
| implicit-self.swift:59:24:59:37 | CallExpr | implicit-self.swift:59:9:59:9 | [incoming] x | provenance | |
39+
| implicit-self.swift:61:14:61:17 | self [x] | implicit-self.swift:61:14:61:19 | MemberAccessExpr | provenance | |
40+
| implicit-self.swift:66:9:66:12 | [post] self [x] | implicit-self.swift:66:24:66:24 | x | provenance | |
41+
| implicit-self.swift:66:9:66:12 | [post] self [x] | implicit-self.swift:67:14:67:14 | x | provenance | |
42+
| implicit-self.swift:66:9:66:12 | [post] self [x] | implicit-self.swift:68:14:68:17 | self [x] | provenance | |
43+
| implicit-self.swift:66:9:66:14 | [incoming] MemberAccessExpr | implicit-self.swift:66:9:66:12 | [post] self [x] | provenance | |
44+
| implicit-self.swift:66:29:66:43 | CallExpr | implicit-self.swift:66:9:66:14 | [incoming] MemberAccessExpr | provenance | |
45+
| implicit-self.swift:68:14:68:17 | self [x] | implicit-self.swift:68:14:68:19 | MemberAccessExpr | provenance | |
46+
| implicit-self.swift:73:9:73:9 | [incoming] x | implicit-self.swift:73:19:73:19 | x | provenance | |
47+
| implicit-self.swift:73:9:73:9 | [incoming] x | implicit-self.swift:74:14:74:14 | x | provenance | |
48+
| implicit-self.swift:73:9:73:9 | [incoming] x | implicit-self.swift:75:14:75:17 | self [x] | provenance | |
49+
| implicit-self.swift:73:24:73:38 | CallExpr | implicit-self.swift:73:9:73:9 | [incoming] x | provenance | |
50+
| implicit-self.swift:75:14:75:17 | self [x] | implicit-self.swift:75:14:75:19 | MemberAccessExpr | provenance | |
51+
| implicit-self.swift:80:9:80:12 | [post] self [x] | implicit-self.swift:80:24:80:24 | x | provenance | |
52+
| implicit-self.swift:80:9:80:12 | [post] self [x] | implicit-self.swift:81:14:81:14 | x | provenance | |
53+
| implicit-self.swift:80:9:80:12 | [post] self [x] | implicit-self.swift:82:14:82:17 | self [x] | provenance | |
54+
| implicit-self.swift:80:9:80:14 | [incoming] MemberAccessExpr | implicit-self.swift:80:9:80:12 | [post] self [x] | provenance | |
55+
| implicit-self.swift:80:29:80:43 | CallExpr | implicit-self.swift:80:9:80:14 | [incoming] MemberAccessExpr | provenance | |
56+
| implicit-self.swift:82:14:82:17 | self [x] | implicit-self.swift:82:14:82:19 | MemberAccessExpr | provenance | |
3557
| test.swift:6:10:6:23 | CallExpr | test.swift:6:10:6:32 | BinaryExpr | provenance | |
3658
| test.swift:7:19:7:32 | CallExpr | test.swift:7:10:7:32 | BinaryExpr | provenance | |
3759
| test.swift:9:13:9:26 | CallExpr | test.swift:9:10:9:33 | StringInterpolationExpr | provenance | |
@@ -142,6 +164,32 @@ nodes
142164
| implicit-self.swift:53:22:53:35 | CallExpr | semmle.label | CallExpr |
143165
| implicit-self.swift:54:14:54:16 | box [x] | semmle.label | box [x] |
144166
| implicit-self.swift:54:14:54:18 | MemberAccessExpr | semmle.label | MemberAccessExpr |
167+
| implicit-self.swift:59:9:59:9 | [incoming] x | semmle.label | [incoming] x |
168+
| implicit-self.swift:59:19:59:19 | x | semmle.label | x |
169+
| implicit-self.swift:59:24:59:37 | CallExpr | semmle.label | CallExpr |
170+
| implicit-self.swift:60:14:60:14 | x | semmle.label | x |
171+
| implicit-self.swift:61:14:61:17 | self [x] | semmle.label | self [x] |
172+
| implicit-self.swift:61:14:61:19 | MemberAccessExpr | semmle.label | MemberAccessExpr |
173+
| implicit-self.swift:66:9:66:12 | [post] self [x] | semmle.label | [post] self [x] |
174+
| implicit-self.swift:66:9:66:14 | [incoming] MemberAccessExpr | semmle.label | [incoming] MemberAccessExpr |
175+
| implicit-self.swift:66:24:66:24 | x | semmle.label | x |
176+
| implicit-self.swift:66:29:66:43 | CallExpr | semmle.label | CallExpr |
177+
| implicit-self.swift:67:14:67:14 | x | semmle.label | x |
178+
| implicit-self.swift:68:14:68:17 | self [x] | semmle.label | self [x] |
179+
| implicit-self.swift:68:14:68:19 | MemberAccessExpr | semmle.label | MemberAccessExpr |
180+
| implicit-self.swift:73:9:73:9 | [incoming] x | semmle.label | [incoming] x |
181+
| implicit-self.swift:73:19:73:19 | x | semmle.label | x |
182+
| implicit-self.swift:73:24:73:38 | CallExpr | semmle.label | CallExpr |
183+
| implicit-self.swift:74:14:74:14 | x | semmle.label | x |
184+
| implicit-self.swift:75:14:75:17 | self [x] | semmle.label | self [x] |
185+
| implicit-self.swift:75:14:75:19 | MemberAccessExpr | semmle.label | MemberAccessExpr |
186+
| implicit-self.swift:80:9:80:12 | [post] self [x] | semmle.label | [post] self [x] |
187+
| implicit-self.swift:80:9:80:14 | [incoming] MemberAccessExpr | semmle.label | [incoming] MemberAccessExpr |
188+
| implicit-self.swift:80:24:80:24 | x | semmle.label | x |
189+
| implicit-self.swift:80:29:80:43 | CallExpr | semmle.label | CallExpr |
190+
| implicit-self.swift:81:14:81:14 | x | semmle.label | x |
191+
| implicit-self.swift:82:14:82:17 | self [x] | semmle.label | self [x] |
192+
| implicit-self.swift:82:14:82:19 | MemberAccessExpr | semmle.label | MemberAccessExpr |
145193
| test.swift:2:10:2:21 | CallExpr | semmle.label | CallExpr |
146194
| test.swift:6:10:6:23 | CallExpr | semmle.label | CallExpr |
147195
| test.swift:6:10:6:32 | BinaryExpr | semmle.label | BinaryExpr |
@@ -237,8 +285,6 @@ nodes
237285
| test.swift:144:10:144:10 | a | semmle.label | a |
238286
subpaths
239287
testFailures
240-
| test.swift:138:10:138:10 | a | Fixed missing result: hasTaintFlow=t15.1 |
241-
| test.swift:144:10:144:10 | a | Fixed missing result: hasTaintFlow=t16.1 |
242288
#select
243289
| implicit-self.swift:12:14:12:19 | MemberAccessExpr | implicit-self.swift:11:18:11:31 | CallExpr | implicit-self.swift:12:14:12:19 | MemberAccessExpr | $@ | implicit-self.swift:11:18:11:31 | CallExpr | CallExpr |
244290
| implicit-self.swift:18:14:18:14 | x | implicit-self.swift:17:13:17:26 | CallExpr | implicit-self.swift:18:14:18:14 | x | $@ | implicit-self.swift:17:13:17:26 | CallExpr | CallExpr |
@@ -248,6 +294,18 @@ testFailures
248294
| implicit-self.swift:42:14:42:18 | MemberAccessExpr | implicit-self.swift:41:17:41:30 | CallExpr | implicit-self.swift:42:14:42:18 | MemberAccessExpr | $@ | implicit-self.swift:41:17:41:30 | CallExpr | CallExpr |
249295
| implicit-self.swift:48:14:48:23 | MemberAccessExpr | implicit-self.swift:47:17:47:30 | CallExpr | implicit-self.swift:48:14:48:23 | MemberAccessExpr | $@ | implicit-self.swift:47:17:47:30 | CallExpr | CallExpr |
250296
| implicit-self.swift:54:14:54:18 | MemberAccessExpr | implicit-self.swift:53:22:53:35 | CallExpr | implicit-self.swift:54:14:54:18 | MemberAccessExpr | $@ | implicit-self.swift:53:22:53:35 | CallExpr | CallExpr |
297+
| implicit-self.swift:59:19:59:19 | x | implicit-self.swift:59:24:59:37 | CallExpr | implicit-self.swift:59:19:59:19 | x | $@ | implicit-self.swift:59:24:59:37 | CallExpr | CallExpr |
298+
| implicit-self.swift:60:14:60:14 | x | implicit-self.swift:59:24:59:37 | CallExpr | implicit-self.swift:60:14:60:14 | x | $@ | implicit-self.swift:59:24:59:37 | CallExpr | CallExpr |
299+
| implicit-self.swift:61:14:61:19 | MemberAccessExpr | implicit-self.swift:59:24:59:37 | CallExpr | implicit-self.swift:61:14:61:19 | MemberAccessExpr | $@ | implicit-self.swift:59:24:59:37 | CallExpr | CallExpr |
300+
| implicit-self.swift:66:24:66:24 | x | implicit-self.swift:66:29:66:43 | CallExpr | implicit-self.swift:66:24:66:24 | x | $@ | implicit-self.swift:66:29:66:43 | CallExpr | CallExpr |
301+
| implicit-self.swift:67:14:67:14 | x | implicit-self.swift:66:29:66:43 | CallExpr | implicit-self.swift:67:14:67:14 | x | $@ | implicit-self.swift:66:29:66:43 | CallExpr | CallExpr |
302+
| implicit-self.swift:68:14:68:19 | MemberAccessExpr | implicit-self.swift:66:29:66:43 | CallExpr | implicit-self.swift:68:14:68:19 | MemberAccessExpr | $@ | implicit-self.swift:66:29:66:43 | CallExpr | CallExpr |
303+
| implicit-self.swift:73:19:73:19 | x | implicit-self.swift:73:24:73:38 | CallExpr | implicit-self.swift:73:19:73:19 | x | $@ | implicit-self.swift:73:24:73:38 | CallExpr | CallExpr |
304+
| implicit-self.swift:74:14:74:14 | x | implicit-self.swift:73:24:73:38 | CallExpr | implicit-self.swift:74:14:74:14 | x | $@ | implicit-self.swift:73:24:73:38 | CallExpr | CallExpr |
305+
| implicit-self.swift:75:14:75:19 | MemberAccessExpr | implicit-self.swift:73:24:73:38 | CallExpr | implicit-self.swift:75:14:75:19 | MemberAccessExpr | $@ | implicit-self.swift:73:24:73:38 | CallExpr | CallExpr |
306+
| implicit-self.swift:80:24:80:24 | x | implicit-self.swift:80:29:80:43 | CallExpr | implicit-self.swift:80:24:80:24 | x | $@ | implicit-self.swift:80:29:80:43 | CallExpr | CallExpr |
307+
| implicit-self.swift:81:14:81:14 | x | implicit-self.swift:80:29:80:43 | CallExpr | implicit-self.swift:81:14:81:14 | x | $@ | implicit-self.swift:80:29:80:43 | CallExpr | CallExpr |
308+
| implicit-self.swift:82:14:82:19 | MemberAccessExpr | implicit-self.swift:80:29:80:43 | CallExpr | implicit-self.swift:82:14:82:19 | MemberAccessExpr | $@ | implicit-self.swift:80:29:80:43 | CallExpr | CallExpr |
251309
| test.swift:2:10:2:21 | CallExpr | test.swift:2:10:2:21 | CallExpr | test.swift:2:10:2:21 | CallExpr | $@ | test.swift:2:10:2:21 | CallExpr | CallExpr |
252310
| test.swift:6:10:6:32 | BinaryExpr | test.swift:6:10:6:23 | CallExpr | test.swift:6:10:6:32 | BinaryExpr | $@ | test.swift:6:10:6:23 | CallExpr | CallExpr |
253311
| test.swift:7:10:7:32 | BinaryExpr | test.swift:7:19:7:32 | CallExpr | test.swift:7:10:7:32 | BinaryExpr | $@ | test.swift:7:19:7:32 | CallExpr | CallExpr |

0 commit comments

Comments
 (0)