Skip to content

Commit 42c3e29

Browse files
committed
Swift: Add taint test of URL.
1 parent 068ec8e commit 42c3e29

File tree

2 files changed

+62
-0
lines changed

2 files changed

+62
-0
lines changed

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

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,3 +174,25 @@
174174
| string.swift:82:31:82:31 | tainted | string.swift:85:13:85:13 | tainted |
175175
| string.swift:84:13:84:13 | clean | string.swift:87:13:87:13 | clean |
176176
| string.swift:85:13:85:13 | tainted | string.swift:88:13:88:13 | tainted |
177+
| url.swift:12:6:12:6 | WriteDef | url.swift:14:29:14:29 | clean |
178+
| url.swift:12:14:12:14 | http://example.com/ | url.swift:12:6:12:6 | WriteDef |
179+
| url.swift:13:6:13:6 | WriteDef | url.swift:15:31:15:31 | tainted |
180+
| url.swift:13:16:13:23 | call to source() | url.swift:13:6:13:6 | WriteDef |
181+
| url.swift:14:6:14:6 | WriteDef | url.swift:17:12:17:12 | urlClean |
182+
| url.swift:14:17:14:35 | ...! | url.swift:14:6:14:6 | WriteDef |
183+
| url.swift:14:29:14:29 | clean | url.swift:20:24:20:24 | clean |
184+
| url.swift:15:6:15:6 | WriteDef | url.swift:18:12:18:12 | urlTainted |
185+
| url.swift:15:19:15:39 | ...! | url.swift:15:6:15:6 | WriteDef |
186+
| url.swift:15:31:15:31 | tainted | url.swift:21:24:21:24 | tainted |
187+
| url.swift:17:12:17:12 | urlClean | url.swift:22:43:22:43 | urlClean |
188+
| url.swift:18:12:18:12 | urlTainted | url.swift:23:43:23:43 | urlTainted |
189+
| url.swift:20:24:20:24 | clean | url.swift:22:24:22:24 | clean |
190+
| url.swift:21:24:21:24 | tainted | url.swift:29:25:29:25 | tainted |
191+
| url.swift:22:24:22:24 | clean | url.swift:23:24:23:24 | clean |
192+
| url.swift:23:24:23:24 | clean | url.swift:25:25:25:25 | clean |
193+
| url.swift:25:25:25:25 | clean | url.swift:34:26:34:26 | clean |
194+
| url.swift:29:25:29:25 | tainted | url.swift:38:28:38:28 | tainted |
195+
| url.swift:34:2:34:31 | WriteDef | url.swift:35:12:35:12 | urlClean2 |
196+
| url.swift:34:14:34:31 | call to ... | url.swift:34:2:34:31 | WriteDef |
197+
| url.swift:38:2:38:35 | WriteDef | url.swift:39:12:39:12 | urlTainted2 |
198+
| url.swift:38:16:38:35 | call to ... | url.swift:38:2:38:35 | WriteDef |
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
2+
class URL
3+
{
4+
init?(string: String) {}
5+
init?(string: String, relativeTo: URL?) {}
6+
}
7+
8+
func source() -> String { return "" }
9+
func sink(arg: URL) {}
10+
11+
func taintThroughURL() {
12+
let clean = "http://example.com/"
13+
let tainted = source()
14+
let urlClean = URL(string: clean)!
15+
let urlTainted = URL(string: tainted)!
16+
17+
sink(arg: urlClean)
18+
sink(arg: urlTainted) // tainted [NOT DETECTED]
19+
20+
sink(arg: URL(string: clean, relativeTo: nil)!)
21+
sink(arg: URL(string: tainted, relativeTo: nil)!) // tainted [NOT DETECTED]
22+
sink(arg: URL(string: clean, relativeTo: urlClean)!)
23+
sink(arg: URL(string: clean, relativeTo: urlTainted)!) // tainted [NOT DETECTED]
24+
25+
if let x = URL(string: clean) {
26+
sink(arg: x)
27+
}
28+
29+
if let y = URL(string: tainted) {
30+
sink(arg: y) // tainted [NOT DETECTED]
31+
}
32+
33+
var urlClean2 : URL!
34+
urlClean2 = URL(string: clean)
35+
sink(arg: urlClean2)
36+
37+
var urlTainted2 : URL!
38+
urlTainted2 = URL(string: tainted)
39+
sink(arg: urlTainted2) // tainted [NOT DETECTED]
40+
}

0 commit comments

Comments
 (0)