Skip to content

Commit 24c8f1d

Browse files
committed
Swift: Add some local (and remote) flow sources for String.
1 parent e669754 commit 24c8f1d

File tree

3 files changed

+22
-6
lines changed

3 files changed

+22
-6
lines changed

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,13 @@ private class StringSource extends SourceModelCsv {
66
row =
77
[
88
// String(contentsOf:) is a remote flow source
9-
";String;true;init(contentsOf:);(URL);;ReturnValue;remote"
9+
";String;true;init(contentsOf:);(URL);;ReturnValue;remote",
10+
";String;true;init(contentsOf:encoding:);(URL,String.Encoding);;ReturnValue;remote",
11+
";String;true;init(contentsOf:usedEncoding:);(URL,String.Encoding);;ReturnValue;remote",
12+
// String(contentsOfFile:) is a local flow source
13+
";String;true;init(contentsOfFile:);(String);;ReturnValue;local",
14+
";String;true;init(contentsOfFile:encoding:);(String,String.Encoding);;ReturnValue;local",
15+
";String;true;init(contentsOfFile:usedEncoding:);(String,String.Encoding);;ReturnValue;local"
1016
]
1117
}
1218
}

swift/ql/test/library-tests/dataflow/flowsources/FlowSources.expected

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,16 @@
55
| customurlschemes.swift:48:9:48:28 | ...[...] | Remote URL in UIApplicationDelegate.application.launchOptions |
66
| string.swift:56:21:56:21 | call to init(contentsOf:) | external |
77
| string.swift:56:21:56:44 | call to init(contentsOf:) | external |
8+
| string.swift:57:21:57:21 | call to init(contentsOf:encoding:) | external |
9+
| string.swift:57:21:57:77 | call to init(contentsOf:encoding:) | external |
10+
| string.swift:59:21:59:21 | call to init(contentsOf:usedEncoding:) | external |
11+
| string.swift:59:21:59:69 | call to init(contentsOf:usedEncoding:) | external |
12+
| string.swift:62:21:62:21 | call to init(contentsOfFile:) | external |
13+
| string.swift:62:21:62:48 | call to init(contentsOfFile:) | external |
14+
| string.swift:63:21:63:21 | call to init(contentsOfFile:encoding:) | external |
15+
| string.swift:63:21:63:81 | call to init(contentsOfFile:encoding:) | external |
16+
| string.swift:64:21:64:21 | call to init(contentsOfFile:usedEncoding:) | external |
17+
| string.swift:64:21:64:73 | call to init(contentsOfFile:usedEncoding:) | external |
818
| url.swift:53:15:53:19 | .resourceBytes | external |
919
| url.swift:60:15:60:19 | .lines | external |
1020
| url.swift:67:16:67:22 | .lines | external |

swift/ql/test/library-tests/dataflow/flowsources/string.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -54,14 +54,14 @@ func testStrings() {
5454

5555
let url = URL(string: "http://example.com/")
5656
let string3 = try String(contentsOf: url!) // SOURCE
57-
let string4 = try String(contentsOf: url!, encoding: String.Encoding.ascii) // SOURCE [NOT DETECTED]
57+
let string4 = try String(contentsOf: url!, encoding: String.Encoding.ascii) // SOURCE
5858
var encoding = String.Encoding.ascii
59-
let string5 = try String(contentsOf: url!, usedEncoding: &encoding) // SOURCE [NOT DETECTED]
59+
let string5 = try String(contentsOf: url!, usedEncoding: &encoding) // SOURCE
6060

6161
let path = "file.txt"
62-
let string6 = try String(contentsOfFile: path) // SOURCE [NOT DETECTED]
63-
let string7 = try String(contentsOfFile: path, encoding: String.Encoding.ascii) // SOURCE [NOT DETECTED]
64-
let string8 = try String(contentsOfFile: path, usedEncoding: &encoding) // SOURCE [NOT DETECTED]
62+
let string6 = try String(contentsOfFile: path) // SOURCE
63+
let string7 = try String(contentsOfFile: path, encoding: String.Encoding.ascii) // SOURCE
64+
let string8 = try String(contentsOfFile: path, usedEncoding: &encoding) // SOURCE
6565
} catch {
6666
// ...
6767
}

0 commit comments

Comments
 (0)