Skip to content

Commit c61edc1

Browse files
committed
Swift: Model RangeReplaceableCollection initializers.
1 parent 0c534b6 commit c61edc1

File tree

4 files changed

+25
-7
lines changed

4 files changed

+25
-7
lines changed

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

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

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@ private class CollectionSummaries extends SummaryModelCsv {
2727
";Collection;true;removeFirst();;;Argument[-1];ReturnValue;taint",
2828
";Collection;true;popFirst();;;Argument[-1];ReturnValue;taint",
2929
";Collection;true;randomElement();;;Argument[-1].CollectionElement;ReturnValue.OptionalSome;value",
30+
";RangeReplaceableCollection;true;init(_:);;;Argument[0];ReturnValue.CollectionElement;taint",
31+
";RangeReplaceableCollection;true;init(_:);;;Argument[0].CollectionElement;ReturnValue.CollectionElement;value",
32+
";RangeReplaceableCollection;true;init(repeating:count:);;;Argument[0];ReturnValue.CollectionElement;value",
3033
";RangeReplaceableCollection;true;append(_:);;;Argument[0];Argument[-1];taint",
3134
";RangeReplaceableCollection;true;append(contentsOf:);;;Argument[0];Argument[-1];taint",
3235
";RangeReplaceableCollection;true;remove(at:);;;Argument[-1];ReturnValue;taint",

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

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,10 @@ edges
7777
| conversions.swift:171:14:171:26 | call to sourceArray() | conversions.swift:173:13:173:13 | arr1 |
7878
| conversions.swift:171:14:171:26 | call to sourceArray() | conversions.swift:175:13:175:19 | ...[...] |
7979
| conversions.swift:171:14:171:26 | call to sourceArray() | conversions.swift:178:25:178:25 | arr1 |
80+
| conversions.swift:171:14:171:26 | call to sourceArray() | conversions.swift:185:31:185:31 | arr1 |
8081
| conversions.swift:172:14:172:26 | [...] [Collection element] | conversions.swift:176:13:176:13 | arr2 [Collection element] |
8182
| conversions.swift:172:14:172:26 | [...] [Collection element] | conversions.swift:179:25:179:25 | arr2 [Collection element] |
83+
| conversions.swift:172:14:172:26 | [...] [Collection element] | conversions.swift:186:31:186:31 | arr2 [Collection element] |
8284
| conversions.swift:172:15:172:25 | call to sourceInt() | conversions.swift:172:14:172:26 | [...] [Collection element] |
8385
| conversions.swift:176:13:176:13 | arr2 [Collection element] | conversions.swift:176:13:176:19 | ...[...] |
8486
| conversions.swift:178:19:178:29 | call to Array<Element>.init(_:) [Collection element] | conversions.swift:182:13:182:13 | arr1b [Collection element] |
@@ -87,6 +89,12 @@ edges
8789
| conversions.swift:179:25:179:25 | arr2 [Collection element] | conversions.swift:179:19:179:29 | call to Array<Element>.init(_:) [Collection element] |
8890
| conversions.swift:182:13:182:13 | arr1b [Collection element] | conversions.swift:182:13:182:20 | ...[...] |
8991
| conversions.swift:183:13:183:13 | arr2b [Collection element] | conversions.swift:183:13:183:20 | ...[...] |
92+
| conversions.swift:185:15:185:35 | call to ContiguousArray<Element>.init(_:) [Collection element] | conversions.swift:189:13:189:13 | arr1c [Collection element] |
93+
| conversions.swift:185:31:185:31 | arr1 | conversions.swift:185:15:185:35 | call to ContiguousArray<Element>.init(_:) [Collection element] |
94+
| conversions.swift:186:15:186:35 | call to ContiguousArray<Element>.init(_:) [Collection element] | conversions.swift:190:13:190:13 | arr2c [Collection element] |
95+
| conversions.swift:186:31:186:31 | arr2 [Collection element] | conversions.swift:186:15:186:35 | call to ContiguousArray<Element>.init(_:) [Collection element] |
96+
| conversions.swift:189:13:189:13 | arr1c [Collection element] | conversions.swift:189:13:189:20 | ...[...] |
97+
| conversions.swift:190:13:190:13 | arr2c [Collection element] | conversions.swift:190:13:190:20 | ...[...] |
9098
| file://:0:0:0:0 | self [first] | file://:0:0:0:0 | .first |
9199
| file://:0:0:0:0 | self [second] | file://:0:0:0:0 | .second |
92100
| file://:0:0:0:0 | value | file://:0:0:0:0 | [post] self [first] |
@@ -307,6 +315,14 @@ nodes
307315
| conversions.swift:182:13:182:20 | ...[...] | semmle.label | ...[...] |
308316
| conversions.swift:183:13:183:13 | arr2b [Collection element] | semmle.label | arr2b [Collection element] |
309317
| conversions.swift:183:13:183:20 | ...[...] | semmle.label | ...[...] |
318+
| conversions.swift:185:15:185:35 | call to ContiguousArray<Element>.init(_:) [Collection element] | semmle.label | call to ContiguousArray<Element>.init(_:) [Collection element] |
319+
| conversions.swift:185:31:185:31 | arr1 | semmle.label | arr1 |
320+
| conversions.swift:186:15:186:35 | call to ContiguousArray<Element>.init(_:) [Collection element] | semmle.label | call to ContiguousArray<Element>.init(_:) [Collection element] |
321+
| conversions.swift:186:31:186:31 | arr2 [Collection element] | semmle.label | arr2 [Collection element] |
322+
| conversions.swift:189:13:189:13 | arr1c [Collection element] | semmle.label | arr1c [Collection element] |
323+
| conversions.swift:189:13:189:20 | ...[...] | semmle.label | ...[...] |
324+
| conversions.swift:190:13:190:13 | arr2c [Collection element] | semmle.label | arr2c [Collection element] |
325+
| conversions.swift:190:13:190:20 | ...[...] | semmle.label | ...[...] |
310326
| file://:0:0:0:0 | .first | semmle.label | .first |
311327
| file://:0:0:0:0 | .second | semmle.label | .second |
312328
| file://:0:0:0:0 | [post] self [first] | semmle.label | [post] self [first] |
@@ -493,6 +509,8 @@ subpaths
493509
| conversions.swift:176:13:176:19 | ...[...] | conversions.swift:172:15:172:25 | call to sourceInt() | conversions.swift:176:13:176:19 | ...[...] | result |
494510
| conversions.swift:182:13:182:20 | ...[...] | conversions.swift:171:14:171:26 | call to sourceArray() | conversions.swift:182:13:182:20 | ...[...] | result |
495511
| conversions.swift:183:13:183:20 | ...[...] | conversions.swift:172:15:172:25 | call to sourceInt() | conversions.swift:183:13:183:20 | ...[...] | result |
512+
| conversions.swift:189:13:189:20 | ...[...] | conversions.swift:171:14:171:26 | call to sourceArray() | conversions.swift:189:13:189:20 | ...[...] | result |
513+
| conversions.swift:190:13:190:20 | ...[...] | conversions.swift:172:15:172:25 | call to sourceInt() | conversions.swift:190:13:190:20 | ...[...] | result |
496514
| simple.swift:12:13:12:24 | ... .+(_:_:) ... | simple.swift:12:17:12:24 | call to source() | simple.swift:12:13:12:24 | ... .+(_:_:) ... | result |
497515
| simple.swift:13:13:13:24 | ... .+(_:_:) ... | simple.swift:13:13:13:20 | call to source() | simple.swift:13:13:13:24 | ... .+(_:_:) ... | result |
498516
| 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: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -177,16 +177,16 @@ class TestArrayConversion {
177177

178178
let arr1b = try Array(arr1)
179179
let arr2b = try Array(arr2)
180-
sink(arg: arr1b) // $ MISSING: tainted=171
180+
sink(arg: arr1b)
181181
sink(arg: arr2b)
182182
sink(arg: arr1b[0]) // $ tainted=171
183183
sink(arg: arr2b[0]) // $ tainted=172
184184

185185
let arr1c = ContiguousArray(arr1)
186186
let arr2c = ContiguousArray(arr2)
187-
sink(arg: arr1c) // $ MISSING: tainted=171
187+
sink(arg: arr1c)
188188
sink(arg: arr2c)
189-
sink(arg: arr1c[0]) // $ MISSING: tainted=171
190-
sink(arg: arr2c[0]) // $ MISSING: tainted=172
189+
sink(arg: arr1c[0]) // $ tainted=171
190+
sink(arg: arr2c[0]) // $ tainted=172
191191
}
192192
}

0 commit comments

Comments
 (0)