Skip to content

Commit 3a38f3b

Browse files
committed
Swift: Add test cases.
1 parent 0ae04de commit 3a38f3b

File tree

1 file changed

+31
-0
lines changed

1 file changed

+31
-0
lines changed

swift/ql/test/query-tests/Security/CWE-134/UncontrolledFormatString.swift

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,4 +124,35 @@ func tests() throws {
124124
let taintedVal2 = Int(tainted) ?? 0
125125
let taintedSan2 = String(taintedVal2)
126126
let r = String(format: taintedSan2) // GOOD: sufficiently sanitized
127+
128+
_ = String("abc").appendingFormat("%s", "abc") // GOOD: not tainted
129+
_ = String("abc").appendingFormat("%s", tainted) // GOOD: format not tainted
130+
_ = String("abc").appendingFormat(tainted, "abc") // BAD [NOT DETECTED]
131+
_ = String(tainted).appendingFormat("%s", "abc") // GOOD: format not tainted
132+
133+
let s = NSMutableString(string: "foo")
134+
s.appendFormat(NSString(string: "%s"), "abc") // GOOD: not tainted
135+
s.appendFormat(NSString(string: tainted), "abc") // BAD [NOT DETECTED]
136+
137+
_ = NSPredicate(format: tainted) // GOOD: this should be flagged by `swift/predicate-injection`, not `swift/uncontrolled-format-string`
138+
139+
tainted.withCString({
140+
cstr in
141+
_ = dprintf(0, cstr, "abc") // BAD [NOT DETECTED]
142+
_ = dprintf(0, "%s", cstr) // GOOD: format not tainted
143+
_ = vprintf(cstr, getVaList(["abc"])) // BAD [NOT DETECTED]
144+
_ = vprintf("%s", getVaList([cstr])) // GOOD: format not tainted
145+
_ = vfprintf(nil, cstr, getVaList(["abc"])) // BAD [NOT DETECTED]
146+
_ = vfprintf(nil, "%s", getVaList([cstr])) // GOOD: format not tainted
147+
_ = vasprintf_l(nil, nil, cstr, getVaList(["abc"])) // BAD [NOT DETECTED]
148+
_ = vasprintf_l(nil, nil, "%s", getVaList([cstr])) // GOOD: format not tainted
149+
})
150+
151+
myFormatMessage(string: tainted, "abc") // BAD [NOT DETECTED]
152+
myFormatMessage(string: "%s", tainted) // GOOD: format not tainted
153+
154+
_ = MyString(format: tainted, "abc") // BAD [NOT DETECTED]
155+
_ = MyString(format: "%s", tainted) // GOOD: format not tainted
156+
_ = MyString(formatString: tainted, "abc") // BAD [NOT DETECTED]
157+
_ = MyString(formatString: "%s", tainted) // GOOD: format not tainted
127158
}

0 commit comments

Comments
 (0)