@@ -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