Skip to content

Commit 4b66bad

Browse files
committed
Swift: Model array initializers.
1 parent 9a4410d commit 4b66bad

File tree

3 files changed

+22
-2
lines changed

3 files changed

+22
-2
lines changed

swift/ql/lib/codeql/swift/frameworks/StandardLibrary/Array.qll

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,11 @@ private class ArraySummaries extends SummaryModelCsv {
1919
override predicate row(string row) {
2020
row =
2121
[
22+
";Array;true;init(_:);;;Argument[0];ReturnValue.ArrayElement;value",
23+
";Array;true;init(_:);;;Argument[0].ArrayElement;ReturnValue.ArrayElement;value",
24+
";Array;true;init(_:);;;Argument[0].CollectionElement;ReturnValue.ArrayElement;value",
25+
";Array;true;init(repeating:count:);;;Argument[0];ReturnValue.ArrayElement;value",
26+
";Array;true;init(arrayLiteral:);;;Argument[0].ArrayElement;ReturnValue.ArrayElement;value",
2227
";Array;true;insert(_:at:);;;Argument[0];Argument[-1].ArrayElement;value",
2328
";Array;true;insert(_:at:);;;Argument[1];Argument[-1];taint"
2429
]

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,14 @@ edges
66
| conversions.swift:31:12:31:30 | call to String.init(_:) | conversions.swift:31:12:31:32 | .utf8 |
77
| conversions.swift:31:19:31:29 | call to sourceInt() | conversions.swift:31:12:31:30 | call to String.init(_:) |
88
| conversions.swift:33:12:33:30 | [...] [Array element] | conversions.swift:35:12:35:12 | arr [Array element] |
9+
| conversions.swift:33:12:33:30 | [...] [Array element] | conversions.swift:37:20:37:20 | arr [Array element] |
910
| conversions.swift:33:19:33:29 | call to sourceInt() | conversions.swift:33:12:33:30 | [...] [Array element] |
1011
| conversions.swift:35:12:35:12 | arr [Array element] | conversions.swift:35:12:35:17 | ...[...] |
12+
| conversions.swift:37:12:37:23 | call to Array<Element>.init(_:) [Array element] | conversions.swift:37:12:37:26 | ...[...] |
13+
| conversions.swift:37:20:37:20 | arr [Array element] | conversions.swift:37:12:37:23 | call to Array<Element>.init(_:) [Array element] |
14+
| conversions.swift:39:12:39:39 | call to Array<Element>.init(_:) [Array element] | conversions.swift:39:12:39:42 | ...[...] |
15+
| conversions.swift:39:20:39:33 | call to sourceString() | conversions.swift:39:20:39:35 | .utf8 |
16+
| conversions.swift:39:20:39:35 | .utf8 | conversions.swift:39:12:39:39 | call to Array<Element>.init(_:) [Array element] |
1117
| conversions.swift:41:13:41:23 | call to sourceInt() | conversions.swift:42:13:42:13 | v |
1218
| conversions.swift:45:18:45:41 | call to numericCast(_:) | conversions.swift:46:12:46:12 | v2 |
1319
| conversions.swift:45:30:45:40 | call to sourceInt() | conversions.swift:45:18:45:41 | call to numericCast(_:) |
@@ -145,6 +151,13 @@ nodes
145151
| conversions.swift:33:19:33:29 | call to sourceInt() | semmle.label | call to sourceInt() |
146152
| conversions.swift:35:12:35:12 | arr [Array element] | semmle.label | arr [Array element] |
147153
| conversions.swift:35:12:35:17 | ...[...] | semmle.label | ...[...] |
154+
| conversions.swift:37:12:37:23 | call to Array<Element>.init(_:) [Array element] | semmle.label | call to Array<Element>.init(_:) [Array element] |
155+
| conversions.swift:37:12:37:26 | ...[...] | semmle.label | ...[...] |
156+
| conversions.swift:37:20:37:20 | arr [Array element] | semmle.label | arr [Array element] |
157+
| conversions.swift:39:12:39:39 | call to Array<Element>.init(_:) [Array element] | semmle.label | call to Array<Element>.init(_:) [Array element] |
158+
| conversions.swift:39:12:39:42 | ...[...] | semmle.label | ...[...] |
159+
| conversions.swift:39:20:39:33 | call to sourceString() | semmle.label | call to sourceString() |
160+
| conversions.swift:39:20:39:35 | .utf8 | semmle.label | .utf8 |
148161
| conversions.swift:41:13:41:23 | call to sourceInt() | semmle.label | call to sourceInt() |
149162
| conversions.swift:42:13:42:13 | v | semmle.label | v |
150163
| conversions.swift:45:18:45:41 | call to numericCast(_:) | semmle.label | call to numericCast(_:) |
@@ -346,6 +359,8 @@ subpaths
346359
| conversions.swift:30:12:30:30 | call to String.init(_:) | conversions.swift:30:19:30:29 | call to sourceInt() | conversions.swift:30:12:30:30 | call to String.init(_:) | result |
347360
| conversions.swift:31:12:31:32 | .utf8 | conversions.swift:31:19:31:29 | call to sourceInt() | conversions.swift:31:12:31:32 | .utf8 | result |
348361
| conversions.swift:35:12:35:17 | ...[...] | conversions.swift:33:19:33:29 | call to sourceInt() | conversions.swift:35:12:35:17 | ...[...] | result |
362+
| conversions.swift:37:12:37:26 | ...[...] | conversions.swift:33:19:33:29 | call to sourceInt() | conversions.swift:37:12:37:26 | ...[...] | result |
363+
| conversions.swift:39:12:39:42 | ...[...] | conversions.swift:39:20:39:33 | call to sourceString() | conversions.swift:39:12:39:42 | ...[...] | result |
349364
| conversions.swift:42:13:42:13 | v | conversions.swift:41:13:41:23 | call to sourceInt() | conversions.swift:42:13:42:13 | v | result |
350365
| conversions.swift:46:12:46:12 | v2 | conversions.swift:45:30:45:40 | call to sourceInt() | conversions.swift:46:12:46:12 | v2 | result |
351366
| conversions.swift:49:12:49:12 | v4 | conversions.swift:48:31:48:41 | call to sourceInt() | conversions.swift:49:12:49:12 | v4 | result |

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,9 @@ func testConversions() {
3434
sink(arg: arr)
3535
sink(arg: arr[0]) // $ tainted=33
3636
sink(arg: [MyInt](arr))
37-
sink(arg: [MyInt](arr)[0]) // $ MISSING: tainted=33
37+
sink(arg: [MyInt](arr)[0]) // $ tainted=33
3838
sink(arg: [UInt8](sourceString().utf8))
39-
sink(arg: [UInt8](sourceString().utf8)[0]) // $ MISSING: tainted=33
39+
sink(arg: [UInt8](sourceString().utf8)[0]) // $ tainted=39
4040

4141
if let v = sourceInt() as? UInt {
4242
sink(arg: v) // $ tainted=41

0 commit comments

Comments
 (0)