Skip to content

Commit 2863a14

Browse files
committed
Swift: Add more tests for Arrays.
1 parent df1bc1a commit 2863a14

File tree

3 files changed

+103
-1
lines changed

3 files changed

+103
-1
lines changed

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

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,50 @@
171171
| conversions.swift:157:12:157:12 | v3 | conversions.swift:158:12:158:12 | v3 |
172172
| conversions.swift:165:24:165:24 | myCEnumConst | conversions.swift:165:12:165:36 | call to Self.init(_:) |
173173
| conversions.swift:166:24:166:34 | call to sourceInt() | conversions.swift:166:12:166:35 | call to Self.init(_:) |
174+
| conversions.swift:169:7:169:7 | SSA def(self) | conversions.swift:169:7:169:7 | self[return] |
175+
| conversions.swift:169:7:169:7 | self | conversions.swift:169:7:169:7 | SSA def(self) |
176+
| conversions.swift:170:2:170:2 | SSA def(self) | conversions.swift:170:2:191:2 | self[return] |
177+
| conversions.swift:170:2:170:2 | self | conversions.swift:170:2:170:2 | SSA def(self) |
178+
| conversions.swift:171:7:171:7 | SSA def(arr1) | conversions.swift:173:13:173:13 | arr1 |
179+
| conversions.swift:171:7:171:7 | arr1 | conversions.swift:171:7:171:7 | SSA def(arr1) |
180+
| conversions.swift:171:14:171:26 | call to sourceArray() | conversions.swift:171:7:171:7 | arr1 |
181+
| conversions.swift:172:7:172:7 | SSA def(arr2) | conversions.swift:174:13:174:13 | arr2 |
182+
| conversions.swift:172:7:172:7 | arr2 | conversions.swift:172:7:172:7 | SSA def(arr2) |
183+
| conversions.swift:172:14:172:26 | [...] | conversions.swift:172:7:172:7 | arr2 |
184+
| conversions.swift:173:13:173:13 | arr1 | conversions.swift:175:13:175:13 | arr1 |
185+
| conversions.swift:174:13:174:13 | arr2 | conversions.swift:176:13:176:13 | arr2 |
186+
| conversions.swift:175:13:175:13 | [post] arr1 | conversions.swift:178:25:178:25 | arr1 |
187+
| conversions.swift:175:13:175:13 | arr1 | conversions.swift:175:13:175:19 | ...[...] |
188+
| conversions.swift:175:13:175:13 | arr1 | conversions.swift:178:25:178:25 | arr1 |
189+
| conversions.swift:176:13:176:13 | [post] arr2 | conversions.swift:179:25:179:25 | arr2 |
190+
| conversions.swift:176:13:176:13 | arr2 | conversions.swift:176:13:176:19 | ...[...] |
191+
| conversions.swift:176:13:176:13 | arr2 | conversions.swift:179:25:179:25 | arr2 |
192+
| conversions.swift:178:7:178:7 | SSA def(arr1b) | conversions.swift:180:13:180:13 | arr1b |
193+
| conversions.swift:178:7:178:7 | arr1b | conversions.swift:178:7:178:7 | SSA def(arr1b) |
194+
| conversions.swift:178:15:178:29 | try ... | conversions.swift:178:7:178:7 | arr1b |
195+
| conversions.swift:178:19:178:29 | call to Array<Element>.init(_:) | conversions.swift:178:15:178:29 | try ... |
196+
| conversions.swift:178:25:178:25 | arr1 | conversions.swift:185:31:185:31 | arr1 |
197+
| conversions.swift:179:7:179:7 | SSA def(arr2b) | conversions.swift:181:13:181:13 | arr2b |
198+
| conversions.swift:179:7:179:7 | arr2b | conversions.swift:179:7:179:7 | SSA def(arr2b) |
199+
| conversions.swift:179:15:179:29 | try ... | conversions.swift:179:7:179:7 | arr2b |
200+
| conversions.swift:179:19:179:29 | call to Array<Element>.init(_:) | conversions.swift:179:15:179:29 | try ... |
201+
| conversions.swift:179:25:179:25 | arr2 | conversions.swift:186:31:186:31 | arr2 |
202+
| conversions.swift:180:13:180:13 | arr1b | conversions.swift:182:13:182:13 | arr1b |
203+
| conversions.swift:181:13:181:13 | arr2b | conversions.swift:183:13:183:13 | arr2b |
204+
| conversions.swift:182:13:182:13 | arr1b | conversions.swift:182:13:182:20 | ...[...] |
205+
| conversions.swift:183:13:183:13 | arr2b | conversions.swift:183:13:183:20 | ...[...] |
206+
| conversions.swift:185:7:185:7 | SSA def(arr1c) | conversions.swift:187:13:187:13 | arr1c |
207+
| conversions.swift:185:7:185:7 | arr1c | conversions.swift:185:7:185:7 | SSA def(arr1c) |
208+
| conversions.swift:185:15:185:35 | call to ContiguousArray<Element>.init(_:) | conversions.swift:185:7:185:7 | arr1c |
209+
| conversions.swift:186:7:186:7 | SSA def(arr2c) | conversions.swift:188:13:188:13 | arr2c |
210+
| conversions.swift:186:7:186:7 | arr2c | conversions.swift:186:7:186:7 | SSA def(arr2c) |
211+
| conversions.swift:186:15:186:35 | call to ContiguousArray<Element>.init(_:) | conversions.swift:186:7:186:7 | arr2c |
212+
| conversions.swift:187:13:187:13 | [post] arr1c | conversions.swift:189:13:189:13 | arr1c |
213+
| conversions.swift:187:13:187:13 | arr1c | conversions.swift:189:13:189:13 | arr1c |
214+
| conversions.swift:188:13:188:13 | [post] arr2c | conversions.swift:190:13:190:13 | arr2c |
215+
| conversions.swift:188:13:188:13 | arr2c | conversions.swift:190:13:190:13 | arr2c |
216+
| conversions.swift:189:13:189:13 | arr1c | conversions.swift:189:13:189:20 | ...[...] |
217+
| conversions.swift:190:13:190:13 | arr2c | conversions.swift:190:13:190:20 | ...[...] |
174218
| simple.swift:12:13:12:13 | 1 | simple.swift:12:13:12:24 | ... .+(_:_:) ... |
175219
| simple.swift:12:17:12:24 | call to source() | simple.swift:12:13:12:24 | ... .+(_:_:) ... |
176220
| simple.swift:13:13:13:20 | call to source() | simple.swift:13:13:13:24 | ... .+(_:_:) ... |

swift/ql/test/library-tests/dataflow/taint/core/Taint.expected

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,19 @@ edges
6969
| conversions.swift:156:25:156:69 | call to unsafeDowncast(_:to:) | conversions.swift:158:12:158:12 | v3 |
7070
| conversions.swift:156:40:156:40 | parent | conversions.swift:156:25:156:69 | call to unsafeDowncast(_:to:) |
7171
| conversions.swift:166:24:166:34 | call to sourceInt() | conversions.swift:166:12:166:35 | call to Self.init(_:) |
72+
| conversions.swift:171:14:171:26 | call to sourceArray() | conversions.swift:173:13:173:13 | arr1 |
73+
| conversions.swift:171:14:171:26 | call to sourceArray() | conversions.swift:175:13:175:19 | ...[...] |
74+
| conversions.swift:171:14:171:26 | call to sourceArray() | conversions.swift:178:25:178:25 | arr1 |
75+
| conversions.swift:172:14:172:26 | [...] [Collection element] | conversions.swift:176:13:176:13 | arr2 [Collection element] |
76+
| conversions.swift:172:14:172:26 | [...] [Collection element] | conversions.swift:179:25:179:25 | arr2 [Collection element] |
77+
| conversions.swift:172:15:172:25 | call to sourceInt() | conversions.swift:172:14:172:26 | [...] [Collection element] |
78+
| conversions.swift:176:13:176:13 | arr2 [Collection element] | conversions.swift:176:13:176:19 | ...[...] |
79+
| conversions.swift:178:19:178:29 | call to Array<Element>.init(_:) [Collection element] | conversions.swift:182:13:182:13 | arr1b [Collection element] |
80+
| conversions.swift:178:25:178:25 | arr1 | conversions.swift:178:19:178:29 | call to Array<Element>.init(_:) [Collection element] |
81+
| conversions.swift:179:19:179:29 | call to Array<Element>.init(_:) [Collection element] | conversions.swift:183:13:183:13 | arr2b [Collection element] |
82+
| conversions.swift:179:25:179:25 | arr2 [Collection element] | conversions.swift:179:19:179:29 | call to Array<Element>.init(_:) [Collection element] |
83+
| conversions.swift:182:13:182:13 | arr1b [Collection element] | conversions.swift:182:13:182:20 | ...[...] |
84+
| conversions.swift:183:13:183:13 | arr2b [Collection element] | conversions.swift:183:13:183:20 | ...[...] |
7285
| file://:0:0:0:0 | self [first] | file://:0:0:0:0 | .first |
7386
| file://:0:0:0:0 | self [second] | file://:0:0:0:0 | .second |
7487
| file://:0:0:0:0 | value | file://:0:0:0:0 | [post] self [first] |
@@ -265,6 +278,21 @@ nodes
265278
| conversions.swift:158:12:158:12 | v3 | semmle.label | v3 |
266279
| conversions.swift:166:12:166:35 | call to Self.init(_:) | semmle.label | call to Self.init(_:) |
267280
| conversions.swift:166:24:166:34 | call to sourceInt() | semmle.label | call to sourceInt() |
281+
| conversions.swift:171:14:171:26 | call to sourceArray() | semmle.label | call to sourceArray() |
282+
| conversions.swift:172:14:172:26 | [...] [Collection element] | semmle.label | [...] [Collection element] |
283+
| conversions.swift:172:15:172:25 | call to sourceInt() | semmle.label | call to sourceInt() |
284+
| conversions.swift:173:13:173:13 | arr1 | semmle.label | arr1 |
285+
| conversions.swift:175:13:175:19 | ...[...] | semmle.label | ...[...] |
286+
| conversions.swift:176:13:176:13 | arr2 [Collection element] | semmle.label | arr2 [Collection element] |
287+
| conversions.swift:176:13:176:19 | ...[...] | semmle.label | ...[...] |
288+
| conversions.swift:178:19:178:29 | call to Array<Element>.init(_:) [Collection element] | semmle.label | call to Array<Element>.init(_:) [Collection element] |
289+
| conversions.swift:178:25:178:25 | arr1 | semmle.label | arr1 |
290+
| conversions.swift:179:19:179:29 | call to Array<Element>.init(_:) [Collection element] | semmle.label | call to Array<Element>.init(_:) [Collection element] |
291+
| conversions.swift:179:25:179:25 | arr2 [Collection element] | semmle.label | arr2 [Collection element] |
292+
| conversions.swift:182:13:182:13 | arr1b [Collection element] | semmle.label | arr1b [Collection element] |
293+
| conversions.swift:182:13:182:20 | ...[...] | semmle.label | ...[...] |
294+
| conversions.swift:183:13:183:13 | arr2b [Collection element] | semmle.label | arr2b [Collection element] |
295+
| conversions.swift:183:13:183:20 | ...[...] | semmle.label | ...[...] |
268296
| file://:0:0:0:0 | .first | semmle.label | .first |
269297
| file://:0:0:0:0 | .second | semmle.label | .second |
270298
| file://:0:0:0:0 | [post] self [first] | semmle.label | [post] self [first] |
@@ -442,6 +470,11 @@ subpaths
442470
| conversions.swift:157:12:157:12 | v3 | conversions.swift:152:31:152:44 | call to sourceString() | conversions.swift:157:12:157:12 | v3 | result |
443471
| conversions.swift:158:12:158:12 | v3 | conversions.swift:152:31:152:44 | call to sourceString() | conversions.swift:158:12:158:12 | v3 | result |
444472
| conversions.swift:166:12:166:35 | call to Self.init(_:) | conversions.swift:166:24:166:34 | call to sourceInt() | conversions.swift:166:12:166:35 | call to Self.init(_:) | result |
473+
| conversions.swift:173:13:173:13 | arr1 | conversions.swift:171:14:171:26 | call to sourceArray() | conversions.swift:173:13:173:13 | arr1 | result |
474+
| conversions.swift:175:13:175:19 | ...[...] | conversions.swift:171:14:171:26 | call to sourceArray() | conversions.swift:175:13:175:19 | ...[...] | result |
475+
| conversions.swift:176:13:176:19 | ...[...] | conversions.swift:172:15:172:25 | call to sourceInt() | conversions.swift:176:13:176:19 | ...[...] | result |
476+
| conversions.swift:182:13:182:20 | ...[...] | conversions.swift:171:14:171:26 | call to sourceArray() | conversions.swift:182:13:182:20 | ...[...] | result |
477+
| conversions.swift:183:13:183:20 | ...[...] | conversions.swift:172:15:172:25 | call to sourceInt() | conversions.swift:183:13:183:20 | ...[...] | result |
445478
| simple.swift:12:13:12:24 | ... .+(_:_:) ... | simple.swift:12:17:12:24 | call to source() | simple.swift:12:13:12:24 | ... .+(_:_:) ... | result |
446479
| simple.swift:13:13:13:24 | ... .+(_:_:) ... | simple.swift:13:13:13:20 | call to source() | simple.swift:13:13:13:24 | ... .+(_:_:) ... | result |
447480
| simple.swift:14:13:14:24 | ... .-(_:_:) ... | simple.swift:14:17:14:24 | call to source() | simple.swift:14:13:14:24 | ... .-(_:_:) ... | result |

swift/ql/test/library-tests/dataflow/taint/core/conversions.swift

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ func sourceFloat() -> Float { 0.0 }
66
func sourceFloat80() -> Float80 { 0.0 }
77
func sourceDouble() -> Double { 0.0 }
88
func sourceString() -> String { "" }
9-
9+
func sourceArray() -> [Int] { [] }
1010

1111
func sink(arg: Any) { }
1212

@@ -165,3 +165,28 @@ func testCEnum() {
165165
sink(arg: MyCEnumType(myCEnumConst))
166166
sink(arg: MyCEnumType(sourceInt())) // $ tainted=166
167167
}
168+
169+
class TestArrayConversion {
170+
init() {
171+
let arr1 = sourceArray()
172+
let arr2 = [sourceInt()]
173+
sink(arg: arr1) // $ tainted=171
174+
sink(arg: arr2)
175+
sink(arg: arr1[0]) // $ tainted=171
176+
sink(arg: arr2[0]) // $ tainted=172
177+
178+
let arr1b = try Array(arr1)
179+
let arr2b = try Array(arr2)
180+
sink(arg: arr1b) // $ MISSING: tainted=171
181+
sink(arg: arr2b)
182+
sink(arg: arr1b[0]) // $ tainted=171
183+
sink(arg: arr2b[0]) // $ tainted=172
184+
185+
let arr1c = ContiguousArray(arr1)
186+
let arr2c = ContiguousArray(arr2)
187+
sink(arg: arr1c) // $ MISSING: tainted=171
188+
sink(arg: arr2c)
189+
sink(arg: arr1c[0]) // $ MISSING: tainted=171
190+
sink(arg: arr2c[0]) // $ MISSING: tainted=172
191+
}
192+
}

0 commit comments

Comments
 (0)