@@ -124,4 +124,35 @@ func tests() throws {
124
124
let taintedVal2 = Int ( tainted) ?? 0
125
125
let taintedSan2 = String ( taintedVal2)
126
126
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
127
158
}
0 commit comments