Merge pull request #12126 from geoffw0/append

Swift: Move some models into collections
This commit is contained in:
Geoffrey White
2023-02-09 09:33:08 +00:00
committed by GitHub
7 changed files with 102 additions and 83 deletions

View File

@@ -25,10 +25,34 @@ private class CollectionSummaries extends SummaryModelCsv {
";Collection;true;split(maxSplits:omittingEmptySubsequences:whereSeparator:);;;Argument[-1];ReturnValue;taint",
";Collection;true;split(separator:maxSplits:omittingEmptySubsequences:);;;Argument[-1];ReturnValue;taint",
";Collection;true;removeFirst();;;Argument[-1];ReturnValue;taint",
";Collection;true;popFirst();;;Argument[-1];ReturnValue;taint",
";RangeReplaceableCollection;true;append(_:);;;Argument[0];Argument[-1];taint",
";RangeReplaceableCollection;true;append(contentsOf:);;;Argument[0];Argument[-1];taint",
";RangeReplaceableCollection;true;remove(at:);;;Argument[-1];ReturnValue;taint",
";RangeReplaceableCollection;true;removeFirst();;;Argument[-1];ReturnValue;taint",
";RangeReplaceableCollection;true;removeLast();;;Argument[-1];ReturnValue;taint",
";RangeReplaceableCollection;true;insert(_:at:);;;Argument[0];Argument[-1];taint",
";BidirectionalCollection;true;joined(separator:);;;Argument[-1..0];ReturnValue;taint",
";BidirectionalCollection;true;last(where:);;;Argument[-1];ReturnValue;taint",
";BidirectionalCollection;true;popLast();;;Argument[-1];ReturnValue;taint",
]
}
}
/**
* A content implying that, if a `Collection` is tainted, certain fields are also
* tainted.
*/
private class CollectionFieldsInheritTaint extends TaintInheritingContent,
DataFlow::Content::FieldContent {
CollectionFieldsInheritTaint() {
exists(FieldDecl f | this.getField() = f |
(
f.getEnclosingDecl().(NominalTypeDecl).getName() = ["Collection", "BidirectionalCollection"] or
f.getEnclosingDecl().(ExtensionDecl).getExtendedTypeDecl().getName() =
["Collection", "BidirectionalCollection"]
) and
f.getName() = ["first", "last"]
)
}
}

View File

@@ -22,9 +22,7 @@ private class DataSummaries extends SummaryModelCsv {
";Data;true;init(contentsOf:options:);;;Argument[0];ReturnValue;taint",
";Data;true;init(bytesNoCopy:count:deallocator:);;;Argument[0];ReturnValue;taint",
";Data;true;init(referencing:);;;Argument[0];ReturnValue;taint",
";Data;true;append(_:);;;Argument[0];Argument[-1];taint",
";Data;true;append(_:count:);;;Argument[0];Argument[-1];taint",
";Data;true;append(contentsOf:);;;Argument[0];Argument[-1];taint",
";Data;true;base64EncodedData(options:);;;Argument[-1];ReturnValue;taint",
";Data;true;base64EncodedString(options:);;;Argument[-1];ReturnValue;taint",
";Data;true;compactMap(_:);;;Argument[-1];ReturnValue;taint",
@@ -32,7 +30,6 @@ private class DataSummaries extends SummaryModelCsv {
";Data;true;copyBytes(to:count:);;;Argument[-1];Argument[0];taint",
";Data;true;copyBytes(to:from:);;;Argument[-1];Argument[0];taint",
";Data;true;flatMap(_:);;;Argument[-1];ReturnValue;taint",
";Data;true;insert(_:at:);;;Argument[0];Argument[-1];taint",
";Data;true;insert(contentsOf:at:);;;Argument[0];Argument[-1];taint",
";Data;true;map(_:);;;Argument[-1];ReturnValue;taint",
";Data;true;reduce(into:_:);;;Argument[-1];ReturnValue;taint",

View File

@@ -24,6 +24,7 @@ private class SequenceSummaries extends SummaryModelCsv {
";Sequence;true;split(separator:maxSplits:omittingEmptySubsequences:);;;Argument[-1];ReturnValue;taint",
";Sequence;true;joined();;;Argument[-1];ReturnValue;taint",
";Sequence;true;joined(separator:);;;Argument[-1..0];ReturnValue;taint",
";Sequence;true;first(where:);;;Argument[-1];ReturnValue;taint",
]
}
}

View File

@@ -100,14 +100,8 @@ private class StringSummaries extends SummaryModelCsv {
";String;true;localizedStringWithFormat(_:_:);;;Argument[0..1];ReturnValue;taint",
";String;true;write(_:);;;Argument[0];Argument[-1];taint",
";String;true;write(to:);;;Argument[-1];Argument[0];taint",
";String;true;append(_:);;;Argument[0];Argument[-1];taint",
";String;true;append(contentsOf:);;;Argument[0];Argument[-1];taint",
";String;true;insert(_:at:);;;Argument[0];Argument[-1];taint",
";String;true;insert(contentsOf:at:);;;Argument[0];Argument[-1];taint",
";String;true;replaceSubrange(_:with::);;;Argument[1];Argument[-1];taint",
";String;true;popLast();;;Argument[-1];ReturnValue;taint",
";String;true;first(where:);;;Argument[-1];ReturnValue;taint",
";String;true;last(where:);;;Argument[-1];ReturnValue;taint",
";String;true;max();;;Argument[-1];ReturnValue;taint",
";String;true;max(by:);;;Argument[-1];ReturnValue;taint",
";String;true;min();;;Argument[-1];ReturnValue;taint",
@@ -137,7 +131,7 @@ private class StringFieldsInheritTaint extends TaintInheritingContent,
) and
f.getName() =
[
"first", "last", "unicodeScalars", "utf8", "utf16", "lazy", "utf8CString", "description",
"unicodeScalars", "utf8", "utf16", "lazy", "utf8CString", "description",
"debugDescription", "dataValue", "identifierValue", "capitalized", "localizedCapitalized",
"localizedLowercase", "localizedUppercase", "decomposedStringWithCanonicalMapping",
"decomposedStringWithCompatibilityMapping", "precomposedStringWithCanonicalMapping",

View File

@@ -17,33 +17,33 @@
| data.swift:21:7:21:7 | self | data.swift:21:7:21:7 | SSA def(self) |
| data.swift:22:52:22:52 | SSA def(self) | data.swift:22:52:22:67 | self[return] |
| data.swift:22:52:22:52 | self | data.swift:22:52:22:52 | SSA def(self) |
| data.swift:24:5:24:5 | SSA def(self) | data.swift:24:5:24:29 | self[return] |
| data.swift:24:5:24:5 | self | data.swift:24:5:24:5 | SSA def(self) |
| data.swift:25:2:25:2 | SSA def(self) | data.swift:25:2:25:66 | self[return] |
| data.swift:24:3:24:3 | SSA def(self) | data.swift:24:3:24:11 | self[return] |
| data.swift:24:3:24:3 | self | data.swift:24:3:24:3 | SSA def(self) |
| data.swift:25:2:25:2 | SSA def(self) | data.swift:25:2:25:26 | self[return] |
| data.swift:25:2:25:2 | self | data.swift:25:2:25:2 | SSA def(self) |
| data.swift:26:2:26:2 | SSA def(self) | data.swift:26:2:26:61 | self[return] |
| data.swift:26:2:26:2 | SSA def(self) | data.swift:26:2:26:66 | self[return] |
| data.swift:26:2:26:2 | self | data.swift:26:2:26:2 | SSA def(self) |
| data.swift:27:2:27:2 | SSA def(self) | data.swift:27:2:27:62 | self[return] |
| data.swift:27:2:27:2 | SSA def(self) | data.swift:27:2:27:61 | self[return] |
| data.swift:27:2:27:2 | self | data.swift:27:2:27:2 | SSA def(self) |
| data.swift:28:2:28:2 | SSA def(self) | data.swift:28:2:28:45 | self[return] |
| data.swift:28:2:28:2 | SSA def(self) | data.swift:28:2:28:62 | self[return] |
| data.swift:28:2:28:2 | self | data.swift:28:2:28:2 | SSA def(self) |
| data.swift:29:2:29:2 | SSA def(self) | data.swift:29:2:29:82 | self[return] |
| data.swift:29:2:29:2 | SSA def(self) | data.swift:29:2:29:45 | self[return] |
| data.swift:29:2:29:2 | self | data.swift:29:2:29:2 | SSA def(self) |
| data.swift:30:2:30:2 | SSA def(self) | data.swift:30:2:30:50 | self[return] |
| data.swift:30:2:30:2 | SSA def(self) | data.swift:30:2:30:82 | self[return] |
| data.swift:30:2:30:2 | self | data.swift:30:2:30:2 | SSA def(self) |
| data.swift:31:2:31:2 | SSA def(self) | data.swift:31:2:31:29 | self[return] |
| data.swift:31:2:31:2 | SSA def(self) | data.swift:31:2:31:50 | self[return] |
| data.swift:31:2:31:2 | self | data.swift:31:2:31:2 | SSA def(self) |
| data.swift:32:7:32:7 | SSA def(self) | data.swift:32:2:32:24 | self[return] |
| data.swift:32:7:32:7 | self | data.swift:32:7:32:7 | SSA def(self) |
| data.swift:33:7:33:7 | SSA def(self) | data.swift:33:2:33:25 | self[return] |
| data.swift:32:2:32:2 | SSA def(self) | data.swift:32:2:32:29 | self[return] |
| data.swift:32:2:32:2 | self | data.swift:32:2:32:2 | SSA def(self) |
| data.swift:33:7:33:7 | SSA def(self) | data.swift:33:2:33:24 | self[return] |
| data.swift:33:7:33:7 | self | data.swift:33:7:33:7 | SSA def(self) |
| data.swift:34:7:34:7 | SSA def(self) | data.swift:34:2:34:63 | self[return] |
| data.swift:34:7:34:7 | SSA def(self) | data.swift:34:2:34:25 | self[return] |
| data.swift:34:7:34:7 | self | data.swift:34:7:34:7 | SSA def(self) |
| data.swift:35:7:35:7 | SSA def(self) | data.swift:35:2:35:52 | self[return] |
| data.swift:35:7:35:7 | SSA def(self) | data.swift:35:2:35:63 | self[return] |
| data.swift:35:7:35:7 | self | data.swift:35:7:35:7 | SSA def(self) |
| data.swift:36:7:36:7 | SSA def(self) | data.swift:36:2:36:36 | self[return] |
| data.swift:36:7:36:7 | SSA def(self) | data.swift:36:2:36:52 | self[return] |
| data.swift:36:7:36:7 | self | data.swift:36:7:36:7 | SSA def(self) |
| data.swift:37:7:37:7 | SSA def(self) | data.swift:37:2:37:33 | self[return] |
| data.swift:37:7:37:7 | SSA def(self) | data.swift:37:2:37:36 | self[return] |
| data.swift:37:7:37:7 | self | data.swift:37:7:37:7 | SSA def(self) |
| data.swift:38:7:38:7 | SSA def(self) | data.swift:38:2:38:88 | self[return] |
| data.swift:38:7:38:7 | self | data.swift:38:7:38:7 | SSA def(self) |

View File

@@ -1,17 +1,17 @@
edges
| data.swift:24:5:24:29 | [summary param] 0 in Data.init(_:) : | file://:0:0:0:0 | [summary] to write: return (return) in Data.init(_:) : |
| data.swift:25:2:25:66 | [summary param] 0 in Data.init(base64Encoded:options:) : | file://:0:0:0:0 | [summary] to write: return (return) in Data.init(base64Encoded:options:) : |
| data.swift:26:2:26:61 | [summary param] 0 in Data.init(buffer:) : | file://:0:0:0:0 | [summary] to write: return (return) in Data.init(buffer:) : |
| data.swift:27:2:27:62 | [summary param] 0 in Data.init(buffer:) : | file://:0:0:0:0 | [summary] to write: return (return) in Data.init(buffer:) : |
| data.swift:28:2:28:45 | [summary param] 0 in Data.init(bytes:count:) : | file://:0:0:0:0 | [summary] to write: return (return) in Data.init(bytes:count:) : |
| data.swift:29:2:29:82 | [summary param] 0 in Data.init(bytesNoCopy:count:deallocator:) : | file://:0:0:0:0 | [summary] to write: return (return) in Data.init(bytesNoCopy:count:deallocator:) : |
| data.swift:30:2:30:50 | [summary param] 0 in Data.init(contentsOf:options:) : | file://:0:0:0:0 | [summary] to write: return (return) in Data.init(contentsOf:options:) : |
| data.swift:31:2:31:29 | [summary param] 0 in Data.init(referencing:) : | file://:0:0:0:0 | [summary] to write: return (return) in Data.init(referencing:) : |
| data.swift:32:2:32:24 | [summary param] 0 in append(_:) : | file://:0:0:0:0 | [summary] to write: argument this in append(_:) : |
| data.swift:33:2:33:25 | [summary param] 0 in append(_:) : | file://:0:0:0:0 | [summary] to write: argument this in append(_:) : |
| data.swift:34:2:34:63 | [summary param] 0 in append(_:) : | file://:0:0:0:0 | [summary] to write: argument this in append(_:) : |
| data.swift:35:2:35:52 | [summary param] 0 in append(_:count:) : | file://:0:0:0:0 | [summary] to write: argument this in append(_:count:) : |
| data.swift:36:2:36:36 | [summary param] 0 in append(contentsOf:) : | file://:0:0:0:0 | [summary] to write: argument this in append(contentsOf:) : |
| data.swift:25:2:25:26 | [summary param] 0 in Data.init(_:) : | file://:0:0:0:0 | [summary] to write: return (return) in Data.init(_:) : |
| data.swift:26:2:26:66 | [summary param] 0 in Data.init(base64Encoded:options:) : | file://:0:0:0:0 | [summary] to write: return (return) in Data.init(base64Encoded:options:) : |
| data.swift:27:2:27:61 | [summary param] 0 in Data.init(buffer:) : | file://:0:0:0:0 | [summary] to write: return (return) in Data.init(buffer:) : |
| data.swift:28:2:28:62 | [summary param] 0 in Data.init(buffer:) : | file://:0:0:0:0 | [summary] to write: return (return) in Data.init(buffer:) : |
| data.swift:29:2:29:45 | [summary param] 0 in Data.init(bytes:count:) : | file://:0:0:0:0 | [summary] to write: return (return) in Data.init(bytes:count:) : |
| data.swift:30:2:30:82 | [summary param] 0 in Data.init(bytesNoCopy:count:deallocator:) : | file://:0:0:0:0 | [summary] to write: return (return) in Data.init(bytesNoCopy:count:deallocator:) : |
| data.swift:31:2:31:50 | [summary param] 0 in Data.init(contentsOf:options:) : | file://:0:0:0:0 | [summary] to write: return (return) in Data.init(contentsOf:options:) : |
| data.swift:32:2:32:29 | [summary param] 0 in Data.init(referencing:) : | file://:0:0:0:0 | [summary] to write: return (return) in Data.init(referencing:) : |
| data.swift:33:2:33:24 | [summary param] 0 in append(_:) : | file://:0:0:0:0 | [summary] to write: argument this in append(_:) : |
| data.swift:34:2:34:25 | [summary param] 0 in append(_:) : | file://:0:0:0:0 | [summary] to write: argument this in append(_:) : |
| data.swift:35:2:35:63 | [summary param] 0 in append(_:) : | file://:0:0:0:0 | [summary] to write: argument this in append(_:) : |
| data.swift:36:2:36:52 | [summary param] 0 in append(_:count:) : | file://:0:0:0:0 | [summary] to write: argument this in append(_:count:) : |
| data.swift:37:2:37:36 | [summary param] 0 in append(contentsOf:) : | file://:0:0:0:0 | [summary] to write: argument this in append(contentsOf:) : |
| data.swift:38:2:38:88 | [summary param] this in base64EncodedData(options:) : | file://:0:0:0:0 | [summary] to write: return (return) in base64EncodedData(options:) : |
| data.swift:39:2:39:86 | [summary param] this in base64EncodedString(options:) : | file://:0:0:0:0 | [summary] to write: return (return) in base64EncodedString(options:) : |
| data.swift:40:2:40:99 | [summary param] this in compactMap(_:) : | file://:0:0:0:0 | [summary] to write: return (return) in compactMap(_:) : |
@@ -37,48 +37,48 @@ edges
| data.swift:64:2:64:72 | [summary param] this in trimmingPrefix(while:) : | file://:0:0:0:0 | [summary] to write: return (return) in trimmingPrefix(while:) : |
| data.swift:81:20:81:51 | call to Data.init(_:) : | data.swift:82:26:82:26 | dataTainted : |
| data.swift:81:20:81:51 | call to Data.init(_:) : | data.swift:85:12:85:12 | dataTainted |
| data.swift:81:25:81:47 | .utf8 : | data.swift:24:5:24:29 | [summary param] 0 in Data.init(_:) : |
| data.swift:81:25:81:47 | .utf8 : | data.swift:25:2:25:26 | [summary param] 0 in Data.init(_:) : |
| data.swift:81:25:81:47 | .utf8 : | data.swift:81:20:81:51 | call to Data.init(_:) : |
| data.swift:81:26:81:33 | call to source() : | data.swift:81:25:81:47 | .utf8 : |
| data.swift:82:21:82:37 | call to Data.init(_:) : | data.swift:86:12:86:12 | dataTainted2 |
| data.swift:82:26:82:26 | dataTainted : | data.swift:24:5:24:29 | [summary param] 0 in Data.init(_:) : |
| data.swift:82:26:82:26 | dataTainted : | data.swift:25:2:25:26 | [summary param] 0 in Data.init(_:) : |
| data.swift:82:26:82:26 | dataTainted : | data.swift:82:21:82:37 | call to Data.init(_:) : |
| data.swift:89:21:89:71 | call to Data.init(base64Encoded:options:) : | data.swift:90:12:90:12 | dataTainted3 |
| data.swift:89:41:89:48 | call to source() : | data.swift:25:2:25:66 | [summary param] 0 in Data.init(base64Encoded:options:) : |
| data.swift:89:41:89:48 | call to source() : | data.swift:26:2:26:66 | [summary param] 0 in Data.init(base64Encoded:options:) : |
| data.swift:89:41:89:48 | call to source() : | data.swift:89:21:89:71 | call to Data.init(base64Encoded:options:) : |
| data.swift:93:21:93:73 | call to Data.init(buffer:) : | data.swift:94:12:94:12 | dataTainted4 |
| data.swift:93:34:93:41 | call to source() : | data.swift:26:2:26:61 | [summary param] 0 in Data.init(buffer:) : |
| data.swift:93:34:93:41 | call to source() : | data.swift:27:2:27:61 | [summary param] 0 in Data.init(buffer:) : |
| data.swift:93:34:93:41 | call to source() : | data.swift:93:21:93:73 | call to Data.init(buffer:) : |
| data.swift:95:21:95:74 | call to Data.init(buffer:) : | data.swift:96:12:96:12 | dataTainted5 |
| data.swift:95:34:95:41 | call to source() : | data.swift:27:2:27:62 | [summary param] 0 in Data.init(buffer:) : |
| data.swift:95:34:95:41 | call to source() : | data.swift:28:2:28:62 | [summary param] 0 in Data.init(buffer:) : |
| data.swift:95:34:95:41 | call to source() : | data.swift:95:21:95:74 | call to Data.init(buffer:) : |
| data.swift:99:21:99:72 | call to Data.init(bytes:count:) : | data.swift:100:12:100:12 | dataTainted6 |
| data.swift:99:33:99:40 | call to source() : | data.swift:28:2:28:45 | [summary param] 0 in Data.init(bytes:count:) : |
| data.swift:99:33:99:40 | call to source() : | data.swift:29:2:29:45 | [summary param] 0 in Data.init(bytes:count:) : |
| data.swift:99:33:99:40 | call to source() : | data.swift:99:21:99:72 | call to Data.init(bytes:count:) : |
| data.swift:103:21:103:114 | call to Data.init(bytesNoCopy:count:deallocator:) : | data.swift:104:12:104:12 | dataTainted7 |
| data.swift:103:39:103:46 | call to source() : | data.swift:29:2:29:82 | [summary param] 0 in Data.init(bytesNoCopy:count:deallocator:) : |
| data.swift:103:39:103:46 | call to source() : | data.swift:30:2:30:82 | [summary param] 0 in Data.init(bytesNoCopy:count:deallocator:) : |
| data.swift:103:39:103:46 | call to source() : | data.swift:103:21:103:114 | call to Data.init(bytesNoCopy:count:deallocator:) : |
| data.swift:107:20:107:27 | call to source() : | data.swift:108:38:108:38 | urlTainted8 : |
| data.swift:108:21:108:62 | call to Data.init(contentsOf:options:) : | data.swift:109:12:109:12 | dataTainted8 |
| data.swift:108:38:108:38 | urlTainted8 : | data.swift:30:2:30:50 | [summary param] 0 in Data.init(contentsOf:options:) : |
| data.swift:108:38:108:38 | urlTainted8 : | data.swift:31:2:31:50 | [summary param] 0 in Data.init(contentsOf:options:) : |
| data.swift:108:38:108:38 | urlTainted8 : | data.swift:108:21:108:62 | call to Data.init(contentsOf:options:) : |
| data.swift:112:21:112:58 | call to Data.init(referencing:) : | data.swift:113:12:113:12 | dataTainted9 |
| data.swift:112:39:112:46 | call to source() : | data.swift:31:2:31:29 | [summary param] 0 in Data.init(referencing:) : |
| data.swift:112:39:112:46 | call to source() : | data.swift:32:2:32:29 | [summary param] 0 in Data.init(referencing:) : |
| data.swift:112:39:112:46 | call to source() : | data.swift:112:21:112:58 | call to Data.init(referencing:) : |
| data.swift:117:2:117:2 | [post] dataTainted10 : | data.swift:118:12:118:12 | dataTainted10 |
| data.swift:117:23:117:30 | call to source() : | data.swift:32:2:32:24 | [summary param] 0 in append(_:) : |
| data.swift:117:23:117:30 | call to source() : | data.swift:33:2:33:24 | [summary param] 0 in append(_:) : |
| data.swift:117:23:117:30 | call to source() : | data.swift:117:2:117:2 | [post] dataTainted10 : |
| data.swift:121:2:121:2 | [post] dataTainted11 : | data.swift:122:12:122:12 | dataTainted11 |
| data.swift:121:23:121:30 | call to source() : | data.swift:33:2:33:25 | [summary param] 0 in append(_:) : |
| data.swift:121:23:121:30 | call to source() : | data.swift:34:2:34:25 | [summary param] 0 in append(_:) : |
| data.swift:121:23:121:30 | call to source() : | data.swift:121:2:121:2 | [post] dataTainted11 : |
| data.swift:125:2:125:2 | [post] dataTainted12 : | data.swift:126:12:126:12 | dataTainted12 |
| data.swift:125:23:125:30 | call to source() : | data.swift:34:2:34:63 | [summary param] 0 in append(_:) : |
| data.swift:125:23:125:30 | call to source() : | data.swift:35:2:35:63 | [summary param] 0 in append(_:) : |
| data.swift:125:23:125:30 | call to source() : | data.swift:125:2:125:2 | [post] dataTainted12 : |
| data.swift:130:2:130:2 | [post] dataTainted13 : | data.swift:131:12:131:12 | dataTainted13 |
| data.swift:130:23:130:30 | call to source() : | data.swift:35:2:35:52 | [summary param] 0 in append(_:count:) : |
| data.swift:130:23:130:30 | call to source() : | data.swift:36:2:36:52 | [summary param] 0 in append(_:count:) : |
| data.swift:130:23:130:30 | call to source() : | data.swift:130:2:130:2 | [post] dataTainted13 : |
| data.swift:135:2:135:2 | [post] dataTainted14 : | data.swift:136:12:136:12 | dataTainted14 |
| data.swift:135:35:135:42 | call to source() : | data.swift:36:2:36:36 | [summary param] 0 in append(contentsOf:) : |
| data.swift:135:35:135:42 | call to source() : | data.swift:37:2:37:36 | [summary param] 0 in append(contentsOf:) : |
| data.swift:135:35:135:42 | call to source() : | data.swift:135:2:135:2 | [post] dataTainted14 : |
| data.swift:139:22:139:29 | call to source() : | data.swift:140:12:140:12 | dataTainted15 : |
| data.swift:140:12:140:12 | dataTainted15 : | data.swift:38:2:38:88 | [summary param] this in base64EncodedData(options:) : |
@@ -183,6 +183,7 @@ edges
| file://:0:0:0:0 | [summary param] this in removeFirst() : | file://:0:0:0:0 | [summary] to write: return (return) in removeFirst() : |
| file://:0:0:0:0 | [summary param] this in removeLast() : | file://:0:0:0:0 | [summary] to write: return (return) in removeLast() : |
| file://:0:0:0:0 | [summary param] this in reversed() : | file://:0:0:0:0 | [summary] to write: return (return) in reversed() : |
| file://:0:0:0:0 | [summary param] this in reversed() : | file://:0:0:0:0 | [summary] to write: return (return) in reversed() : |
| file://:0:0:0:0 | [summary param] this in split(maxSplits:omittingEmptySubsequences:whereSeparator:) : | file://:0:0:0:0 | [summary] to write: return (return) in split(maxSplits:omittingEmptySubsequences:whereSeparator:) : |
| file://:0:0:0:0 | [summary param] this in split(separator:maxSplits:omittingEmptySubsequences:) : | file://:0:0:0:0 | [summary] to write: return (return) in split(separator:maxSplits:omittingEmptySubsequences:) : |
| file://:0:0:0:0 | [summary param] this in suffix(_:) : | file://:0:0:0:0 | [summary] to write: return (return) in suffix(_:) : |
@@ -871,19 +872,19 @@ edges
| webview.swift:150:10:150:10 | src : | webview.swift:72:9:72:9 | self : |
| webview.swift:150:10:150:10 | src : | webview.swift:150:10:150:14 | .request |
nodes
| data.swift:24:5:24:29 | [summary param] 0 in Data.init(_:) : | semmle.label | [summary param] 0 in Data.init(_:) : |
| data.swift:25:2:25:66 | [summary param] 0 in Data.init(base64Encoded:options:) : | semmle.label | [summary param] 0 in Data.init(base64Encoded:options:) : |
| data.swift:26:2:26:61 | [summary param] 0 in Data.init(buffer:) : | semmle.label | [summary param] 0 in Data.init(buffer:) : |
| data.swift:27:2:27:62 | [summary param] 0 in Data.init(buffer:) : | semmle.label | [summary param] 0 in Data.init(buffer:) : |
| data.swift:28:2:28:45 | [summary param] 0 in Data.init(bytes:count:) : | semmle.label | [summary param] 0 in Data.init(bytes:count:) : |
| data.swift:29:2:29:82 | [summary param] 0 in Data.init(bytesNoCopy:count:deallocator:) : | semmle.label | [summary param] 0 in Data.init(bytesNoCopy:count:deallocator:) : |
| data.swift:30:2:30:50 | [summary param] 0 in Data.init(contentsOf:options:) : | semmle.label | [summary param] 0 in Data.init(contentsOf:options:) : |
| data.swift:31:2:31:29 | [summary param] 0 in Data.init(referencing:) : | semmle.label | [summary param] 0 in Data.init(referencing:) : |
| data.swift:32:2:32:24 | [summary param] 0 in append(_:) : | semmle.label | [summary param] 0 in append(_:) : |
| data.swift:33:2:33:25 | [summary param] 0 in append(_:) : | semmle.label | [summary param] 0 in append(_:) : |
| data.swift:34:2:34:63 | [summary param] 0 in append(_:) : | semmle.label | [summary param] 0 in append(_:) : |
| data.swift:35:2:35:52 | [summary param] 0 in append(_:count:) : | semmle.label | [summary param] 0 in append(_:count:) : |
| data.swift:36:2:36:36 | [summary param] 0 in append(contentsOf:) : | semmle.label | [summary param] 0 in append(contentsOf:) : |
| data.swift:25:2:25:26 | [summary param] 0 in Data.init(_:) : | semmle.label | [summary param] 0 in Data.init(_:) : |
| data.swift:26:2:26:66 | [summary param] 0 in Data.init(base64Encoded:options:) : | semmle.label | [summary param] 0 in Data.init(base64Encoded:options:) : |
| data.swift:27:2:27:61 | [summary param] 0 in Data.init(buffer:) : | semmle.label | [summary param] 0 in Data.init(buffer:) : |
| data.swift:28:2:28:62 | [summary param] 0 in Data.init(buffer:) : | semmle.label | [summary param] 0 in Data.init(buffer:) : |
| data.swift:29:2:29:45 | [summary param] 0 in Data.init(bytes:count:) : | semmle.label | [summary param] 0 in Data.init(bytes:count:) : |
| data.swift:30:2:30:82 | [summary param] 0 in Data.init(bytesNoCopy:count:deallocator:) : | semmle.label | [summary param] 0 in Data.init(bytesNoCopy:count:deallocator:) : |
| data.swift:31:2:31:50 | [summary param] 0 in Data.init(contentsOf:options:) : | semmle.label | [summary param] 0 in Data.init(contentsOf:options:) : |
| data.swift:32:2:32:29 | [summary param] 0 in Data.init(referencing:) : | semmle.label | [summary param] 0 in Data.init(referencing:) : |
| data.swift:33:2:33:24 | [summary param] 0 in append(_:) : | semmle.label | [summary param] 0 in append(_:) : |
| data.swift:34:2:34:25 | [summary param] 0 in append(_:) : | semmle.label | [summary param] 0 in append(_:) : |
| data.swift:35:2:35:63 | [summary param] 0 in append(_:) : | semmle.label | [summary param] 0 in append(_:) : |
| data.swift:36:2:36:52 | [summary param] 0 in append(_:count:) : | semmle.label | [summary param] 0 in append(_:count:) : |
| data.swift:37:2:37:36 | [summary param] 0 in append(contentsOf:) : | semmle.label | [summary param] 0 in append(contentsOf:) : |
| data.swift:38:2:38:88 | [summary param] this in base64EncodedData(options:) : | semmle.label | [summary param] this in base64EncodedData(options:) : |
| data.swift:39:2:39:86 | [summary param] this in base64EncodedString(options:) : | semmle.label | [summary param] this in base64EncodedString(options:) : |
| data.swift:40:2:40:99 | [summary param] this in compactMap(_:) : | semmle.label | [summary param] this in compactMap(_:) : |
@@ -1066,6 +1067,7 @@ nodes
| file://:0:0:0:0 | [summary param] this in removeFirst() : | semmle.label | [summary param] this in removeFirst() : |
| file://:0:0:0:0 | [summary param] this in removeLast() : | semmle.label | [summary param] this in removeLast() : |
| file://:0:0:0:0 | [summary param] this in reversed() : | semmle.label | [summary param] this in reversed() : |
| file://:0:0:0:0 | [summary param] this in reversed() : | semmle.label | [summary param] this in reversed() : |
| file://:0:0:0:0 | [summary param] this in split(maxSplits:omittingEmptySubsequences:whereSeparator:) : | semmle.label | [summary param] this in split(maxSplits:omittingEmptySubsequences:whereSeparator:) : |
| file://:0:0:0:0 | [summary param] this in split(separator:maxSplits:omittingEmptySubsequences:) : | semmle.label | [summary param] this in split(separator:maxSplits:omittingEmptySubsequences:) : |
| file://:0:0:0:0 | [summary param] this in suffix(_:) : | semmle.label | [summary param] this in suffix(_:) : |
@@ -1186,6 +1188,7 @@ nodes
| file://:0:0:0:0 | [summary] to write: return (return) in removeFirst() : | semmle.label | [summary] to write: return (return) in removeFirst() : |
| file://:0:0:0:0 | [summary] to write: return (return) in removeLast() : | semmle.label | [summary] to write: return (return) in removeLast() : |
| file://:0:0:0:0 | [summary] to write: return (return) in reversed() : | semmle.label | [summary] to write: return (return) in reversed() : |
| file://:0:0:0:0 | [summary] to write: return (return) in reversed() : | semmle.label | [summary] to write: return (return) in reversed() : |
| file://:0:0:0:0 | [summary] to write: return (return) in shuffled() : | semmle.label | [summary] to write: return (return) in shuffled() : |
| file://:0:0:0:0 | [summary] to write: return (return) in shuffled(using:) : | semmle.label | [summary] to write: return (return) in shuffled(using:) : |
| file://:0:0:0:0 | [summary] to write: return (return) in sorted() : | semmle.label | [summary] to write: return (return) in sorted() : |
@@ -1789,20 +1792,20 @@ nodes
| webview.swift:150:10:150:10 | src : | semmle.label | src : |
| webview.swift:150:10:150:14 | .request | semmle.label | .request |
subpaths
| data.swift:81:25:81:47 | .utf8 : | data.swift:24:5:24:29 | [summary param] 0 in Data.init(_:) : | file://:0:0:0:0 | [summary] to write: return (return) in Data.init(_:) : | data.swift:81:20:81:51 | call to Data.init(_:) : |
| data.swift:82:26:82:26 | dataTainted : | data.swift:24:5:24:29 | [summary param] 0 in Data.init(_:) : | file://:0:0:0:0 | [summary] to write: return (return) in Data.init(_:) : | data.swift:82:21:82:37 | call to Data.init(_:) : |
| data.swift:89:41:89:48 | call to source() : | data.swift:25:2:25:66 | [summary param] 0 in Data.init(base64Encoded:options:) : | file://:0:0:0:0 | [summary] to write: return (return) in Data.init(base64Encoded:options:) : | data.swift:89:21:89:71 | call to Data.init(base64Encoded:options:) : |
| data.swift:93:34:93:41 | call to source() : | data.swift:26:2:26:61 | [summary param] 0 in Data.init(buffer:) : | file://:0:0:0:0 | [summary] to write: return (return) in Data.init(buffer:) : | data.swift:93:21:93:73 | call to Data.init(buffer:) : |
| data.swift:95:34:95:41 | call to source() : | data.swift:27:2:27:62 | [summary param] 0 in Data.init(buffer:) : | file://:0:0:0:0 | [summary] to write: return (return) in Data.init(buffer:) : | data.swift:95:21:95:74 | call to Data.init(buffer:) : |
| data.swift:99:33:99:40 | call to source() : | data.swift:28:2:28:45 | [summary param] 0 in Data.init(bytes:count:) : | file://:0:0:0:0 | [summary] to write: return (return) in Data.init(bytes:count:) : | data.swift:99:21:99:72 | call to Data.init(bytes:count:) : |
| data.swift:103:39:103:46 | call to source() : | data.swift:29:2:29:82 | [summary param] 0 in Data.init(bytesNoCopy:count:deallocator:) : | file://:0:0:0:0 | [summary] to write: return (return) in Data.init(bytesNoCopy:count:deallocator:) : | data.swift:103:21:103:114 | call to Data.init(bytesNoCopy:count:deallocator:) : |
| data.swift:108:38:108:38 | urlTainted8 : | data.swift:30:2:30:50 | [summary param] 0 in Data.init(contentsOf:options:) : | file://:0:0:0:0 | [summary] to write: return (return) in Data.init(contentsOf:options:) : | data.swift:108:21:108:62 | call to Data.init(contentsOf:options:) : |
| data.swift:112:39:112:46 | call to source() : | data.swift:31:2:31:29 | [summary param] 0 in Data.init(referencing:) : | file://:0:0:0:0 | [summary] to write: return (return) in Data.init(referencing:) : | data.swift:112:21:112:58 | call to Data.init(referencing:) : |
| data.swift:117:23:117:30 | call to source() : | data.swift:32:2:32:24 | [summary param] 0 in append(_:) : | file://:0:0:0:0 | [summary] to write: argument this in append(_:) : | data.swift:117:2:117:2 | [post] dataTainted10 : |
| data.swift:121:23:121:30 | call to source() : | data.swift:33:2:33:25 | [summary param] 0 in append(_:) : | file://:0:0:0:0 | [summary] to write: argument this in append(_:) : | data.swift:121:2:121:2 | [post] dataTainted11 : |
| data.swift:125:23:125:30 | call to source() : | data.swift:34:2:34:63 | [summary param] 0 in append(_:) : | file://:0:0:0:0 | [summary] to write: argument this in append(_:) : | data.swift:125:2:125:2 | [post] dataTainted12 : |
| data.swift:130:23:130:30 | call to source() : | data.swift:35:2:35:52 | [summary param] 0 in append(_:count:) : | file://:0:0:0:0 | [summary] to write: argument this in append(_:count:) : | data.swift:130:2:130:2 | [post] dataTainted13 : |
| data.swift:135:35:135:42 | call to source() : | data.swift:36:2:36:36 | [summary param] 0 in append(contentsOf:) : | file://:0:0:0:0 | [summary] to write: argument this in append(contentsOf:) : | data.swift:135:2:135:2 | [post] dataTainted14 : |
| data.swift:81:25:81:47 | .utf8 : | data.swift:25:2:25:26 | [summary param] 0 in Data.init(_:) : | file://:0:0:0:0 | [summary] to write: return (return) in Data.init(_:) : | data.swift:81:20:81:51 | call to Data.init(_:) : |
| data.swift:82:26:82:26 | dataTainted : | data.swift:25:2:25:26 | [summary param] 0 in Data.init(_:) : | file://:0:0:0:0 | [summary] to write: return (return) in Data.init(_:) : | data.swift:82:21:82:37 | call to Data.init(_:) : |
| data.swift:89:41:89:48 | call to source() : | data.swift:26:2:26:66 | [summary param] 0 in Data.init(base64Encoded:options:) : | file://:0:0:0:0 | [summary] to write: return (return) in Data.init(base64Encoded:options:) : | data.swift:89:21:89:71 | call to Data.init(base64Encoded:options:) : |
| data.swift:93:34:93:41 | call to source() : | data.swift:27:2:27:61 | [summary param] 0 in Data.init(buffer:) : | file://:0:0:0:0 | [summary] to write: return (return) in Data.init(buffer:) : | data.swift:93:21:93:73 | call to Data.init(buffer:) : |
| data.swift:95:34:95:41 | call to source() : | data.swift:28:2:28:62 | [summary param] 0 in Data.init(buffer:) : | file://:0:0:0:0 | [summary] to write: return (return) in Data.init(buffer:) : | data.swift:95:21:95:74 | call to Data.init(buffer:) : |
| data.swift:99:33:99:40 | call to source() : | data.swift:29:2:29:45 | [summary param] 0 in Data.init(bytes:count:) : | file://:0:0:0:0 | [summary] to write: return (return) in Data.init(bytes:count:) : | data.swift:99:21:99:72 | call to Data.init(bytes:count:) : |
| data.swift:103:39:103:46 | call to source() : | data.swift:30:2:30:82 | [summary param] 0 in Data.init(bytesNoCopy:count:deallocator:) : | file://:0:0:0:0 | [summary] to write: return (return) in Data.init(bytesNoCopy:count:deallocator:) : | data.swift:103:21:103:114 | call to Data.init(bytesNoCopy:count:deallocator:) : |
| data.swift:108:38:108:38 | urlTainted8 : | data.swift:31:2:31:50 | [summary param] 0 in Data.init(contentsOf:options:) : | file://:0:0:0:0 | [summary] to write: return (return) in Data.init(contentsOf:options:) : | data.swift:108:21:108:62 | call to Data.init(contentsOf:options:) : |
| data.swift:112:39:112:46 | call to source() : | data.swift:32:2:32:29 | [summary param] 0 in Data.init(referencing:) : | file://:0:0:0:0 | [summary] to write: return (return) in Data.init(referencing:) : | data.swift:112:21:112:58 | call to Data.init(referencing:) : |
| data.swift:117:23:117:30 | call to source() : | data.swift:33:2:33:24 | [summary param] 0 in append(_:) : | file://:0:0:0:0 | [summary] to write: argument this in append(_:) : | data.swift:117:2:117:2 | [post] dataTainted10 : |
| data.swift:121:23:121:30 | call to source() : | data.swift:34:2:34:25 | [summary param] 0 in append(_:) : | file://:0:0:0:0 | [summary] to write: argument this in append(_:) : | data.swift:121:2:121:2 | [post] dataTainted11 : |
| data.swift:125:23:125:30 | call to source() : | data.swift:35:2:35:63 | [summary param] 0 in append(_:) : | file://:0:0:0:0 | [summary] to write: argument this in append(_:) : | data.swift:125:2:125:2 | [post] dataTainted12 : |
| data.swift:130:23:130:30 | call to source() : | data.swift:36:2:36:52 | [summary param] 0 in append(_:count:) : | file://:0:0:0:0 | [summary] to write: argument this in append(_:count:) : | data.swift:130:2:130:2 | [post] dataTainted13 : |
| data.swift:135:35:135:42 | call to source() : | data.swift:37:2:37:36 | [summary param] 0 in append(contentsOf:) : | file://:0:0:0:0 | [summary] to write: argument this in append(contentsOf:) : | data.swift:135:2:135:2 | [post] dataTainted14 : |
| data.swift:140:12:140:12 | dataTainted15 : | data.swift:38:2:38:88 | [summary param] this in base64EncodedData(options:) : | file://:0:0:0:0 | [summary] to write: return (return) in base64EncodedData(options:) : | data.swift:140:12:140:55 | call to base64EncodedData(options:) |
| data.swift:144:12:144:12 | dataTainted16 : | data.swift:39:2:39:86 | [summary param] this in base64EncodedString(options:) : | file://:0:0:0:0 | [summary] to write: return (return) in base64EncodedString(options:) : | data.swift:144:12:144:57 | call to base64EncodedString(options:) |
| data.swift:148:29:148:29 | dataTainted17 : | data.swift:40:2:40:99 | [summary param] this in compactMap(_:) : | file://:0:0:0:0 | [summary] to write: return (return) in compactMap(_:) : | data.swift:148:29:148:72 | call to compactMap(_:) : |

View File

@@ -7,7 +7,7 @@ protocol SortComparator {
associatedtype Compared
}
struct Data : BidirectionalCollection
struct Data : RangeReplaceableCollection
{
struct Base64EncodingOptions : OptionSet { let rawValue: Int }
struct Base64DecodingOptions : OptionSet { let rawValue: Int }
@@ -21,7 +21,8 @@ struct Data : BidirectionalCollection
func index(before: Self.Index) -> Self.Index { return 0 }
subscript(position: Self.Index) -> Self.Element { get { return 0 } }
init<S>(_ elements: S) {}
init() {}
init<S>(_ elements: S) {}
init(base64Encoded: Data, options: Data.Base64DecodingOptions) {}
init<SourceType>(buffer: UnsafeBufferPointer<SourceType>) {}
init<SourceType>(buffer: UnsafeMutablePointer<SourceType>) {}
@@ -34,7 +35,6 @@ struct Data : BidirectionalCollection
func append<SourceType>(_: UnsafeBufferPointer<SourceType>) {}
func append(_: UnsafePointer<UInt8>, count: Int) {}
func append(contentsOf: [UInt8]) {}
func append<S>(contentsOf: S) {}
func base64EncodedData(options: Data.Base64EncodingOptions) -> Data { return Data("") }
func base64EncodedString(options: Data.Base64EncodingOptions) -> String { return "" }
func compactMap<ElementOfResult>(_: (UInt8) -> ElementOfResult) -> [ElementOfResult] { return [] }