Skip to content

Commit 0f6b05d

Browse files
authored
Merge pull request github#12126 from geoffw0/append
Swift: Move some models into collections
2 parents b895065 + 60e7d6b commit 0f6b05d

File tree

7 files changed

+102
-83
lines changed

7 files changed

+102
-83
lines changed

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

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,34 @@ private class CollectionSummaries extends SummaryModelCsv {
2525
";Collection;true;split(maxSplits:omittingEmptySubsequences:whereSeparator:);;;Argument[-1];ReturnValue;taint",
2626
";Collection;true;split(separator:maxSplits:omittingEmptySubsequences:);;;Argument[-1];ReturnValue;taint",
2727
";Collection;true;removeFirst();;;Argument[-1];ReturnValue;taint",
28+
";Collection;true;popFirst();;;Argument[-1];ReturnValue;taint",
29+
";RangeReplaceableCollection;true;append(_:);;;Argument[0];Argument[-1];taint",
30+
";RangeReplaceableCollection;true;append(contentsOf:);;;Argument[0];Argument[-1];taint",
2831
";RangeReplaceableCollection;true;remove(at:);;;Argument[-1];ReturnValue;taint",
2932
";RangeReplaceableCollection;true;removeFirst();;;Argument[-1];ReturnValue;taint",
3033
";RangeReplaceableCollection;true;removeLast();;;Argument[-1];ReturnValue;taint",
34+
";RangeReplaceableCollection;true;insert(_:at:);;;Argument[0];Argument[-1];taint",
3135
";BidirectionalCollection;true;joined(separator:);;;Argument[-1..0];ReturnValue;taint",
36+
";BidirectionalCollection;true;last(where:);;;Argument[-1];ReturnValue;taint",
37+
";BidirectionalCollection;true;popLast();;;Argument[-1];ReturnValue;taint",
3238
]
3339
}
3440
}
41+
42+
/**
43+
* A content implying that, if a `Collection` is tainted, certain fields are also
44+
* tainted.
45+
*/
46+
private class CollectionFieldsInheritTaint extends TaintInheritingContent,
47+
DataFlow::Content::FieldContent {
48+
CollectionFieldsInheritTaint() {
49+
exists(FieldDecl f | this.getField() = f |
50+
(
51+
f.getEnclosingDecl().(NominalTypeDecl).getName() = ["Collection", "BidirectionalCollection"] or
52+
f.getEnclosingDecl().(ExtensionDecl).getExtendedTypeDecl().getName() =
53+
["Collection", "BidirectionalCollection"]
54+
) and
55+
f.getName() = ["first", "last"]
56+
)
57+
}
58+
}

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

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,17 +22,14 @@ private class DataSummaries extends SummaryModelCsv {
2222
";Data;true;init(contentsOf:options:);;;Argument[0];ReturnValue;taint",
2323
";Data;true;init(bytesNoCopy:count:deallocator:);;;Argument[0];ReturnValue;taint",
2424
";Data;true;init(referencing:);;;Argument[0];ReturnValue;taint",
25-
";Data;true;append(_:);;;Argument[0];Argument[-1];taint",
2625
";Data;true;append(_:count:);;;Argument[0];Argument[-1];taint",
27-
";Data;true;append(contentsOf:);;;Argument[0];Argument[-1];taint",
2826
";Data;true;base64EncodedData(options:);;;Argument[-1];ReturnValue;taint",
2927
";Data;true;base64EncodedString(options:);;;Argument[-1];ReturnValue;taint",
3028
";Data;true;compactMap(_:);;;Argument[-1];ReturnValue;taint",
3129
";Data;true;copyBytes(to:);;;Argument[-1];Argument[0];taint",
3230
";Data;true;copyBytes(to:count:);;;Argument[-1];Argument[0];taint",
3331
";Data;true;copyBytes(to:from:);;;Argument[-1];Argument[0];taint",
3432
";Data;true;flatMap(_:);;;Argument[-1];ReturnValue;taint",
35-
";Data;true;insert(_:at:);;;Argument[0];Argument[-1];taint",
3633
";Data;true;insert(contentsOf:at:);;;Argument[0];Argument[-1];taint",
3734
";Data;true;map(_:);;;Argument[-1];ReturnValue;taint",
3835
";Data;true;reduce(into:_:);;;Argument[-1];ReturnValue;taint",

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ private class SequenceSummaries extends SummaryModelCsv {
2424
";Sequence;true;split(separator:maxSplits:omittingEmptySubsequences:);;;Argument[-1];ReturnValue;taint",
2525
";Sequence;true;joined();;;Argument[-1];ReturnValue;taint",
2626
";Sequence;true;joined(separator:);;;Argument[-1..0];ReturnValue;taint",
27+
";Sequence;true;first(where:);;;Argument[-1];ReturnValue;taint",
2728
]
2829
}
2930
}

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

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -100,14 +100,8 @@ private class StringSummaries extends SummaryModelCsv {
100100
";String;true;localizedStringWithFormat(_:_:);;;Argument[0..1];ReturnValue;taint",
101101
";String;true;write(_:);;;Argument[0];Argument[-1];taint",
102102
";String;true;write(to:);;;Argument[-1];Argument[0];taint",
103-
";String;true;append(_:);;;Argument[0];Argument[-1];taint",
104-
";String;true;append(contentsOf:);;;Argument[0];Argument[-1];taint",
105-
";String;true;insert(_:at:);;;Argument[0];Argument[-1];taint",
106103
";String;true;insert(contentsOf:at:);;;Argument[0];Argument[-1];taint",
107104
";String;true;replaceSubrange(_:with::);;;Argument[1];Argument[-1];taint",
108-
";String;true;popLast();;;Argument[-1];ReturnValue;taint",
109-
";String;true;first(where:);;;Argument[-1];ReturnValue;taint",
110-
";String;true;last(where:);;;Argument[-1];ReturnValue;taint",
111105
";String;true;max();;;Argument[-1];ReturnValue;taint",
112106
";String;true;max(by:);;;Argument[-1];ReturnValue;taint",
113107
";String;true;min();;;Argument[-1];ReturnValue;taint",
@@ -137,7 +131,7 @@ private class StringFieldsInheritTaint extends TaintInheritingContent,
137131
) and
138132
f.getName() =
139133
[
140-
"first", "last", "unicodeScalars", "utf8", "utf16", "lazy", "utf8CString", "description",
134+
"unicodeScalars", "utf8", "utf16", "lazy", "utf8CString", "description",
141135
"debugDescription", "dataValue", "identifierValue", "capitalized", "localizedCapitalized",
142136
"localizedLowercase", "localizedUppercase", "decomposedStringWithCanonicalMapping",
143137
"decomposedStringWithCompatibilityMapping", "precomposedStringWithCanonicalMapping",

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

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -17,33 +17,33 @@
1717
| data.swift:21:7:21:7 | self | data.swift:21:7:21:7 | SSA def(self) |
1818
| data.swift:22:52:22:52 | SSA def(self) | data.swift:22:52:22:67 | self[return] |
1919
| data.swift:22:52:22:52 | self | data.swift:22:52:22:52 | SSA def(self) |
20-
| data.swift:24:5:24:5 | SSA def(self) | data.swift:24:5:24:29 | self[return] |
21-
| data.swift:24:5:24:5 | self | data.swift:24:5:24:5 | SSA def(self) |
22-
| data.swift:25:2:25:2 | SSA def(self) | data.swift:25:2:25:66 | self[return] |
20+
| data.swift:24:3:24:3 | SSA def(self) | data.swift:24:3:24:11 | self[return] |
21+
| data.swift:24:3:24:3 | self | data.swift:24:3:24:3 | SSA def(self) |
22+
| data.swift:25:2:25:2 | SSA def(self) | data.swift:25:2:25:26 | self[return] |
2323
| data.swift:25:2:25:2 | self | data.swift:25:2:25:2 | SSA def(self) |
24-
| data.swift:26:2:26:2 | SSA def(self) | data.swift:26:2:26:61 | self[return] |
24+
| data.swift:26:2:26:2 | SSA def(self) | data.swift:26:2:26:66 | self[return] |
2525
| data.swift:26:2:26:2 | self | data.swift:26:2:26:2 | SSA def(self) |
26-
| data.swift:27:2:27:2 | SSA def(self) | data.swift:27:2:27:62 | self[return] |
26+
| data.swift:27:2:27:2 | SSA def(self) | data.swift:27:2:27:61 | self[return] |
2727
| data.swift:27:2:27:2 | self | data.swift:27:2:27:2 | SSA def(self) |
28-
| data.swift:28:2:28:2 | SSA def(self) | data.swift:28:2:28:45 | self[return] |
28+
| data.swift:28:2:28:2 | SSA def(self) | data.swift:28:2:28:62 | self[return] |
2929
| data.swift:28:2:28:2 | self | data.swift:28:2:28:2 | SSA def(self) |
30-
| data.swift:29:2:29:2 | SSA def(self) | data.swift:29:2:29:82 | self[return] |
30+
| data.swift:29:2:29:2 | SSA def(self) | data.swift:29:2:29:45 | self[return] |
3131
| data.swift:29:2:29:2 | self | data.swift:29:2:29:2 | SSA def(self) |
32-
| data.swift:30:2:30:2 | SSA def(self) | data.swift:30:2:30:50 | self[return] |
32+
| data.swift:30:2:30:2 | SSA def(self) | data.swift:30:2:30:82 | self[return] |
3333
| data.swift:30:2:30:2 | self | data.swift:30:2:30:2 | SSA def(self) |
34-
| data.swift:31:2:31:2 | SSA def(self) | data.swift:31:2:31:29 | self[return] |
34+
| data.swift:31:2:31:2 | SSA def(self) | data.swift:31:2:31:50 | self[return] |
3535
| data.swift:31:2:31:2 | self | data.swift:31:2:31:2 | SSA def(self) |
36-
| data.swift:32:7:32:7 | SSA def(self) | data.swift:32:2:32:24 | self[return] |
37-
| data.swift:32:7:32:7 | self | data.swift:32:7:32:7 | SSA def(self) |
38-
| data.swift:33:7:33:7 | SSA def(self) | data.swift:33:2:33:25 | self[return] |
36+
| data.swift:32:2:32:2 | SSA def(self) | data.swift:32:2:32:29 | self[return] |
37+
| data.swift:32:2:32:2 | self | data.swift:32:2:32:2 | SSA def(self) |
38+
| data.swift:33:7:33:7 | SSA def(self) | data.swift:33:2:33:24 | self[return] |
3939
| data.swift:33:7:33:7 | self | data.swift:33:7:33:7 | SSA def(self) |
40-
| data.swift:34:7:34:7 | SSA def(self) | data.swift:34:2:34:63 | self[return] |
40+
| data.swift:34:7:34:7 | SSA def(self) | data.swift:34:2:34:25 | self[return] |
4141
| data.swift:34:7:34:7 | self | data.swift:34:7:34:7 | SSA def(self) |
42-
| data.swift:35:7:35:7 | SSA def(self) | data.swift:35:2:35:52 | self[return] |
42+
| data.swift:35:7:35:7 | SSA def(self) | data.swift:35:2:35:63 | self[return] |
4343
| data.swift:35:7:35:7 | self | data.swift:35:7:35:7 | SSA def(self) |
44-
| data.swift:36:7:36:7 | SSA def(self) | data.swift:36:2:36:36 | self[return] |
44+
| data.swift:36:7:36:7 | SSA def(self) | data.swift:36:2:36:52 | self[return] |
4545
| data.swift:36:7:36:7 | self | data.swift:36:7:36:7 | SSA def(self) |
46-
| data.swift:37:7:37:7 | SSA def(self) | data.swift:37:2:37:33 | self[return] |
46+
| data.swift:37:7:37:7 | SSA def(self) | data.swift:37:2:37:36 | self[return] |
4747
| data.swift:37:7:37:7 | self | data.swift:37:7:37:7 | SSA def(self) |
4848
| data.swift:38:7:38:7 | SSA def(self) | data.swift:38:2:38:88 | self[return] |
4949
| data.swift:38:7:38:7 | self | data.swift:38:7:38:7 | SSA def(self) |

0 commit comments

Comments
 (0)