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