Skip to content

Commit f3499e9

Browse files
committed
Swift: Move try, ! to dataflow.
1 parent 6f696cc commit f3499e9

File tree

3 files changed

+22
-8
lines changed

3 files changed

+22
-8
lines changed

swift/ql/lib/codeql/swift/dataflow/internal/DataFlowPrivate.qll

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,12 @@ private module Cached {
106106
//or
107107
// step from previous read to Phi node
108108
localFlowSsaInput(nodeFrom, def, nodeTo.asDefinition())
109+
or
110+
// flow through `try!` and similar constructs
111+
nodeFrom.asExpr() = nodeTo.asExpr().(AnyTryExpr).getSubExpr()
112+
or
113+
// flow through `!`
114+
nodeFrom.asExpr() = nodeTo.asExpr().(ForceValueExpr).getSubExpr()
109115
)
110116
or
111117
exists(ParamReturnKind kind, ExprCfgNode arg |

swift/ql/lib/codeql/swift/dataflow/internal/TaintTrackingPrivate.qll

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,14 +36,6 @@ private module Cached {
3636
nodeTo.asDefinition().(Ssa::WriteDefinition).isInoutDef(e)
3737
)
3838
or
39-
// allow flow through `try!` and similar constructs
40-
// TODO: this should probably be part of DataFlow / TaintTracking?
41-
nodeFrom.asExpr() = nodeTo.asExpr().(AnyTryExpr).getSubExpr()
42-
or
43-
// allow flow through `!`
44-
// TODO: this should probably be part of DataFlow / TaintTracking?
45-
nodeFrom.asExpr() = nodeTo.asExpr().(ForceValueExpr).getSubExpr()
46-
or
4739
// Flow from the computation of the interpolated string literal to the result of the interpolation.
4840
exists(InterpolatedStringLiteralExpr interpolated |
4941
nodeTo.asExpr() = interpolated and

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

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,25 +182,41 @@
182182
| string.swift:82:31:82:31 | tainted | string.swift:85:13:85:13 | tainted |
183183
| string.swift:84:13:84:13 | clean | string.swift:87:13:87:13 | clean |
184184
| string.swift:85:13:85:13 | tainted | string.swift:88:13:88:13 | tainted |
185+
| try.swift:8:17:8:23 | call to clean() | try.swift:8:13:8:23 | try ... |
186+
| try.swift:9:17:9:24 | call to source() | try.swift:9:13:9:24 | try ... |
187+
| try.swift:14:17:14:23 | call to clean() | try.swift:14:12:14:23 | try! ... |
188+
| try.swift:15:17:15:24 | call to source() | try.swift:15:12:15:24 | try! ... |
189+
| try.swift:17:13:17:24 | try? ... | try.swift:17:12:17:26 | ...! |
190+
| try.swift:17:18:17:24 | call to clean() | try.swift:17:13:17:24 | try? ... |
191+
| try.swift:18:13:18:25 | try? ... | try.swift:18:12:18:27 | ...! |
192+
| try.swift:18:18:18:25 | call to source() | try.swift:18:13:18:25 | try? ... |
185193
| url.swift:12:6:12:6 | WriteDef | url.swift:14:29:14:29 | clean |
186194
| url.swift:12:14:12:14 | http://example.com/ | url.swift:12:6:12:6 | WriteDef |
187195
| url.swift:13:6:13:6 | WriteDef | url.swift:15:31:15:31 | tainted |
188196
| url.swift:13:16:13:23 | call to source() | url.swift:13:6:13:6 | WriteDef |
189197
| url.swift:14:6:14:6 | WriteDef | url.swift:17:12:17:12 | urlClean |
198+
| url.swift:14:17:14:34 | call to ... | url.swift:14:17:14:35 | ...! |
190199
| url.swift:14:17:14:35 | ...! | url.swift:14:6:14:6 | WriteDef |
191200
| url.swift:14:29:14:29 | clean | url.swift:20:24:20:24 | clean |
192201
| url.swift:15:6:15:6 | WriteDef | url.swift:18:12:18:12 | urlTainted |
202+
| url.swift:15:19:15:38 | call to ... | url.swift:15:19:15:39 | ...! |
193203
| url.swift:15:19:15:39 | ...! | url.swift:15:6:15:6 | WriteDef |
194204
| url.swift:15:31:15:31 | tainted | url.swift:21:24:21:24 | tainted |
195205
| url.swift:17:12:17:12 | urlClean | url.swift:22:43:22:43 | urlClean |
196206
| url.swift:18:12:18:12 | urlTainted | url.swift:23:43:23:43 | urlTainted |
207+
| url.swift:20:12:20:46 | call to ... | url.swift:20:12:20:47 | ...! |
197208
| url.swift:20:24:20:24 | clean | url.swift:22:24:22:24 | clean |
209+
| url.swift:21:12:21:48 | call to ... | url.swift:21:12:21:49 | ...! |
198210
| url.swift:21:24:21:24 | tainted | url.swift:29:25:29:25 | tainted |
211+
| url.swift:22:12:22:51 | call to ... | url.swift:22:12:22:52 | ...! |
199212
| url.swift:22:24:22:24 | clean | url.swift:23:24:23:24 | clean |
213+
| url.swift:23:12:23:53 | call to ... | url.swift:23:12:23:54 | ...! |
200214
| url.swift:23:24:23:24 | clean | url.swift:25:25:25:25 | clean |
201215
| url.swift:25:25:25:25 | clean | url.swift:34:26:34:26 | clean |
202216
| url.swift:29:25:29:25 | tainted | url.swift:38:28:38:28 | tainted |
203217
| url.swift:34:2:34:31 | WriteDef | url.swift:35:12:35:12 | urlClean2 |
204218
| url.swift:34:14:34:31 | call to ... | url.swift:34:2:34:31 | WriteDef |
219+
| url.swift:35:12:35:12 | urlClean2 | url.swift:35:12:35:12 | ...! |
205220
| url.swift:38:2:38:35 | WriteDef | url.swift:39:12:39:12 | urlTainted2 |
206221
| url.swift:38:16:38:35 | call to ... | url.swift:38:2:38:35 | WriteDef |
222+
| url.swift:39:12:39:12 | urlTainted2 | url.swift:39:12:39:12 | ...! |

0 commit comments

Comments
 (0)