Skip to content

Commit c598d9b

Browse files
committed
Swift: Generalize an SSA case for variables declared in Patterns.
1 parent 8a9a69f commit c598d9b

File tree

3 files changed

+30
-2
lines changed

3 files changed

+30
-2
lines changed

swift/ql/lib/codeql/swift/dataflow/Ssa.qll

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,16 @@ module Ssa {
3030
certain = true
3131
)
3232
or
33-
exists(PatternBindingDecl decl, Pattern pattern |
33+
// Any variable initialization through pattern matching. For example each `x*` in:
34+
// ```
35+
// var x1 = v
36+
// let x2 = v
37+
// let (x3, x4) = tuple
38+
// if let x5 = optional { ... }
39+
// guard let x6 = optional else { ... }
40+
// ```
41+
exists(Pattern pattern |
3442
bb.getNode(i).getNode().asAstNode() = pattern and
35-
decl.getAPattern() = pattern and
3643
v.getParentPattern() = pattern and
3744
certain = true
3845
)

swift/ql/test/library-tests/dataflow/dataflow/LocalFlow.expected

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,22 +241,32 @@
241241
| test.swift:282:26:282:26 | y | test.swift:287:16:287:16 | y |
242242
| test.swift:282:26:282:27 | ...! | test.swift:282:15:282:38 | ... ? ... : ... |
243243
| test.swift:282:31:282:38 | call to source() | test.swift:282:15:282:38 | ... ? ... : ... |
244+
| test.swift:284:8:284:12 | SSA def(z) | test.swift:285:19:285:19 | z |
244245
| test.swift:284:16:284:16 | x | test.swift:291:16:291:16 | x |
246+
| test.swift:287:8:287:12 | SSA def(z) | test.swift:288:19:288:19 | z |
245247
| test.swift:287:16:287:16 | y | test.swift:294:16:294:16 | y |
248+
| test.swift:291:8:291:12 | SSA def(z) | test.swift:292:19:292:19 | z |
246249
| test.swift:291:16:291:16 | x | test.swift:291:16:291:17 | ...? |
247250
| test.swift:291:16:291:16 | x | test.swift:298:20:298:20 | x |
248251
| test.swift:291:16:291:26 | call to signum() | test.swift:291:16:291:26 | OptionalEvaluationExpr |
252+
| test.swift:294:8:294:12 | SSA def(z) | test.swift:295:19:295:19 | z |
249253
| test.swift:294:16:294:16 | y | test.swift:294:16:294:17 | ...? |
250254
| test.swift:294:16:294:16 | y | test.swift:299:20:299:20 | y |
251255
| test.swift:294:16:294:26 | call to signum() | test.swift:294:16:294:26 | OptionalEvaluationExpr |
256+
| test.swift:298:11:298:15 | SSA def(z1) | test.swift:300:15:300:15 | z1 |
252257
| test.swift:298:20:298:20 | x | test.swift:303:15:303:15 | x |
258+
| test.swift:299:11:299:15 | SSA def(z2) | test.swift:301:15:301:15 | z2 |
253259
| test.swift:299:20:299:20 | y | test.swift:304:15:304:15 | y |
254260
| test.swift:303:15:303:15 | x | test.swift:303:15:303:16 | ...! |
255261
| test.swift:303:15:303:15 | x | test.swift:306:28:306:28 | x |
256262
| test.swift:304:15:304:15 | y | test.swift:304:15:304:16 | ...! |
257263
| test.swift:304:15:304:15 | y | test.swift:309:28:309:28 | y |
264+
| test.swift:306:13:306:24 | SSA def(z) | test.swift:307:19:307:19 | z |
258265
| test.swift:306:28:306:28 | x | test.swift:313:12:313:12 | x |
266+
| test.swift:309:13:309:24 | SSA def(z) | test.swift:310:19:310:19 | z |
259267
| test.swift:309:28:309:28 | y | test.swift:319:12:319:12 | y |
268+
| test.swift:314:10:314:21 | SSA def(z) | test.swift:315:19:315:19 | z |
269+
| test.swift:320:10:320:21 | SSA def(z) | test.swift:321:19:321:19 | z |
260270
| test.swift:331:9:331:9 | SSA def(t1) | test.swift:333:15:333:15 | t1 |
261271
| test.swift:331:14:331:26 | (...) | test.swift:331:9:331:9 | SSA def(t1) |
262272
| test.swift:333:15:333:15 | t1 | test.swift:334:15:334:15 | t1 |
@@ -300,7 +310,16 @@
300310
| test.swift:361:15:361:15 | t2 | test.swift:362:15:362:15 | t2 |
301311
| test.swift:375:9:375:13 | SSA def(a) | test.swift:377:12:377:12 | a |
302312
| test.swift:375:22:375:23 | .myNone | test.swift:375:9:375:13 | SSA def(a) |
313+
| test.swift:380:10:380:25 | SSA def(a) | test.swift:381:19:381:19 | a |
314+
| test.swift:382:10:382:30 | SSA def(a) | test.swift:383:19:383:19 | a |
315+
| test.swift:382:10:382:30 | SSA def(b) | test.swift:384:19:384:19 | b |
303316
| test.swift:387:9:387:13 | SSA def(b) | test.swift:389:12:389:12 | b |
304317
| test.swift:387:22:387:40 | call to ... | test.swift:387:9:387:13 | SSA def(b) |
318+
| test.swift:392:10:392:25 | SSA def(a) | test.swift:393:19:393:19 | a |
319+
| test.swift:394:10:394:30 | SSA def(a) | test.swift:395:19:395:19 | a |
320+
| test.swift:394:10:394:30 | SSA def(b) | test.swift:396:19:396:19 | b |
305321
| test.swift:399:9:399:9 | SSA def(c) | test.swift:401:12:401:12 | c |
306322
| test.swift:399:13:399:38 | call to ... | test.swift:399:9:399:9 | SSA def(c) |
323+
| test.swift:404:10:404:25 | SSA def(a) | test.swift:405:19:405:19 | a |
324+
| test.swift:406:10:406:30 | SSA def(a) | test.swift:407:19:407:19 | a |
325+
| test.swift:406:10:406:30 | SSA def(b) | test.swift:408:19:408:19 | b |

swift/ql/test/library-tests/dataflow/taint/LocalTaint.expected

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1276,9 +1276,11 @@
12761276
| url.swift:102:46:102:46 | [post] urlTainted | url.swift:120:46:120:46 | urlTainted |
12771277
| url.swift:102:46:102:46 | urlTainted | url.swift:102:15:102:56 | call to URL.init(string:relativeTo:) |
12781278
| url.swift:102:46:102:46 | urlTainted | url.swift:120:46:120:46 | urlTainted |
1279+
| url.swift:104:5:104:9 | SSA def(x) | url.swift:105:13:105:13 | x |
12791280
| url.swift:104:25:104:25 | [post] clean | url.swift:113:26:113:26 | clean |
12801281
| url.swift:104:25:104:25 | clean | url.swift:104:13:104:30 | call to URL.init(string:) |
12811282
| url.swift:104:25:104:25 | clean | url.swift:113:26:113:26 | clean |
1283+
| url.swift:108:5:108:9 | SSA def(y) | url.swift:109:13:109:13 | y |
12821284
| url.swift:108:25:108:25 | [post] tainted | url.swift:117:28:117:28 | tainted |
12831285
| url.swift:108:25:108:25 | tainted | url.swift:108:13:108:32 | call to URL.init(string:) |
12841286
| url.swift:108:25:108:25 | tainted | url.swift:117:28:117:28 | tainted |

0 commit comments

Comments
 (0)