@@ -277,13 +277,13 @@ func taintThroughURL() {
277
277
sink ( data: data!) // $ tainted=210
278
278
}
279
279
280
- sink ( arg: URL ( fileURLWithPath: tainted) ) // $ MISSING: tainted=210
281
- sink ( arg: URL ( fileURLWithPath: tainted, isDirectory: false ) ) // $ MISSING: tainted=210
282
- sink ( arg: URL ( fileURLWithPath: tainted, relativeTo: urlClean) ) // $ MISSING: tainted=210
283
- sink ( arg: URL ( fileURLWithPath: clean, relativeTo: urlTainted) ) // $ MISSING: tainted=210
284
- sink ( arg: URL ( fileURLWithPath: tainted, isDirectory: false , relativeTo: urlClean) ) // $ MISSING: tainted=210
285
- sink ( arg: URL ( fileURLWithPath: clean, isDirectory: false , relativeTo: urlTainted) ) // $ MISSING: tainted=210
286
- sink ( arg: URL ( fileURLWithPath: tainted) ) // $ MISSING: tainted=
280
+ sink ( arg: URL ( fileURLWithPath: tainted) ) // $ tainted=210
281
+ sink ( arg: URL ( fileURLWithPath: tainted, isDirectory: false ) ) // $ tainted=210
282
+ sink ( arg: URL ( fileURLWithPath: tainted, relativeTo: urlClean) ) // $ tainted=210
283
+ sink ( arg: URL ( fileURLWithPath: clean, relativeTo: urlTainted) ) // $ tainted=210
284
+ sink ( arg: URL ( fileURLWithPath: tainted, isDirectory: false , relativeTo: urlClean) ) // $ tainted=210
285
+ sink ( arg: URL ( fileURLWithPath: clean, isDirectory: false , relativeTo: urlTainted) ) // $ tainted=210
286
+ sink ( arg: URL ( fileURLWithPath: tainted) ) // $ tainted=210
287
287
288
288
let _ = clean. withCString ( {
289
289
ptrClean in
@@ -295,27 +295,27 @@ func taintThroughURL() {
295
295
sink ( arg: URL ( fileURLWithFileSystemRepresentation: ptrTainted, isDirectory: false , relativeTo: nil ) ) // $ MISSING: tainted=210
296
296
} )
297
297
298
- sink ( arg: URL ( fileReferenceLiteralResourceName: tainted) ) // $ MISSING: tainted=210
299
- sink ( arg: URL ( FilePath ( tainted) ) !) // $ MISSING: tainted=210
300
- sink ( arg: URL ( FilePath ( tainted) , isDirectory: false ) !) // $ MISSING: tainted=210
298
+ sink ( arg: URL ( fileReferenceLiteralResourceName: tainted) ) // $ tainted=210
299
+ sink ( arg: URL ( FilePath ( tainted) ) !) // $ tainted=210
300
+ sink ( arg: URL ( FilePath ( tainted) , isDirectory: false ) !) // $ tainted=210
301
301
302
302
if let values = try ? urlTainted. resourceValues ( forKeys: [ ] ) {
303
- sink ( any: values)
304
- sink ( string: values. name!) // $ MISSING: tainted=210
305
- sink ( string: values. path!) // $ MISSING: tainted=210
306
- sink ( string: values. canonicalPath!) // $ MISSING: tainted=210
307
- sink ( string: values. localizedLabel!) // $ MISSING: tainted=210
308
- sink ( string: values. localizedName!) // $ MISSING: tainted=210
309
- sink ( any: values. parentDirectory!) // $ MISSING: tainted=210
303
+ sink ( any: values) // $ tainted=210
304
+ sink ( string: values. name!) // $ tainted=210
305
+ sink ( string: values. path!) // $ tainted=210
306
+ sink ( string: values. canonicalPath!) // $ tainted=210
307
+ sink ( string: values. localizedLabel!) // $ tainted=210
308
+ sink ( string: values. localizedName!) // $ tainted=210
309
+ sink ( any: values. parentDirectory!) // $ tainted=210
310
310
}
311
311
if let values = try ? urlTainted. promisedItemResourceValues ( forKeys: [ ] ) {
312
- sink ( any: values)
313
- sink ( string: values. name!) // $ MISSING: tainted=210
314
- sink ( string: values. path!) // $ MISSING: tainted=210
315
- sink ( string: values. canonicalPath!) // $ MISSING: tainted=210
316
- sink ( string: values. localizedLabel!) // $ MISSING: tainted=210
317
- sink ( string: values. localizedName!) // $ MISSING: tainted=210
318
- sink ( any: values. parentDirectory!) // $ MISSING: tainted=210
312
+ sink ( any: values) // $ tainted=210
313
+ sink ( string: values. name!) // $ tainted=210
314
+ sink ( string: values. path!) // $ tainted=210
315
+ sink ( string: values. canonicalPath!) // $ tainted=210
316
+ sink ( string: values. localizedLabel!) // $ tainted=210
317
+ sink ( string: values. localizedName!) // $ tainted=210
318
+ sink ( any: values. parentDirectory!) // $ tainted=210
319
319
}
320
320
321
321
urlClean. withUnsafeFileSystemRepresentation ( {
@@ -327,47 +327,47 @@ func taintThroughURL() {
327
327
sink ( any: ptr!) // $ MISSING: tainted=210
328
328
} )
329
329
330
- sink ( arg: urlTainted. resolvingSymlinksInPath ( ) ) // $ MISSING: tainted=210
331
- sink ( arg: urlTainted. appendingPathComponent ( clean) ) // $ MISSING: tainted=210
332
- sink ( arg: urlClean. appendingPathComponent ( tainted) ) // $ MISSING: tainted=210
333
- sink ( arg: urlTainted. appendingPathComponent ( clean, isDirectory: false ) ) // $ MISSING: tainted=210
334
- sink ( arg: urlClean. appendingPathComponent ( tainted, isDirectory: false ) ) // $ MISSING: tainted=210
335
- sink ( arg: urlTainted. appendingPathExtension ( clean) ) // $ MISSING: tainted=210
336
- sink ( arg: urlClean. appendingPathExtension ( tainted) ) // $ MISSING: tainted=210
337
- sink ( arg: urlTainted. deletingLastPathComponent ( ) ) // $ MISSING: tainted=210
338
- sink ( arg: urlTainted. deletingPathExtension ( ) ) // $ MISSING: tainted=210
339
- sink ( arg: urlTainted. appending ( component: clean) ) // $ MISSING: tainted=210
340
- sink ( arg: urlClean. appending ( component: tainted) ) // $ MISSING: tainted=210
341
- sink ( arg: urlTainted. appending ( components: clean) ) // $ MISSING: tainted=210
330
+ sink ( arg: urlTainted. resolvingSymlinksInPath ( ) ) // $ tainted=210
331
+ sink ( arg: urlTainted. appendingPathComponent ( clean) ) // $ tainted=210
332
+ sink ( arg: urlClean. appendingPathComponent ( tainted) ) // $ tainted=210
333
+ sink ( arg: urlTainted. appendingPathComponent ( clean, isDirectory: false ) ) // $ tainted=210
334
+ sink ( arg: urlClean. appendingPathComponent ( tainted, isDirectory: false ) ) // $ tainted=210
335
+ sink ( arg: urlTainted. appendingPathExtension ( clean) ) // $ tainted=210
336
+ sink ( arg: urlClean. appendingPathExtension ( tainted) ) // $ tainted=210
337
+ sink ( arg: urlTainted. deletingLastPathComponent ( ) ) // $ tainted=210
338
+ sink ( arg: urlTainted. deletingPathExtension ( ) ) // $ tainted=210
339
+ sink ( arg: urlTainted. appending ( component: clean) ) // $ tainted=210
340
+ sink ( arg: urlClean. appending ( component: tainted) ) // $ tainted=210
341
+ sink ( arg: urlTainted. appending ( components: clean) ) // $ tainted=210
342
342
sink ( arg: urlClean. appending ( components: tainted) ) // $ MISSING: tainted=210
343
343
sink ( arg: urlClean. appending ( components: clean, tainted) ) // $ MISSING: tainted=210
344
- sink ( arg: urlTainted. appending ( path: clean) ) // $ MISSING: tainted=210
345
- sink ( arg: urlClean. appending ( path: tainted) ) // $ MISSING: tainted=210
346
- sink ( arg: urlTainted. appending ( queryItems: [ ] ) ) // $ MISSING: tainted=210
344
+ sink ( arg: urlTainted. appending ( path: clean) ) // $ tainted=210
345
+ sink ( arg: urlClean. appending ( path: tainted) ) // $ tainted=210
346
+ sink ( arg: urlTainted. appending ( queryItems: [ ] ) ) // $ tainted=210
347
347
sink ( arg: urlClean. appending ( queryItems: [ source ( ) as! URLQueryItem ] ) ) // $ MISSING: tainted=210
348
348
349
- sink ( arg: URL ( filePath: tainted) ) // $ MISSING: tainted=210
350
- sink ( arg: URL ( filePath: tainted, relativeTo: nil ) ) // $ MISSING: tainted=210
351
- sink ( arg: URL ( filePath: clean, relativeTo: urlTainted) ) // $ MISSING: tainted=210
352
- sink ( arg: try ! URL ( resolvingAliasFileAt: urlTainted) ) // $ MISSING: tainted=210
353
- sink ( arg: URL ( resource: URLResource ( name: tainted) ) !) // $ MISSING: tainted=210
354
- sink ( arg: URL ( resource: URLResource ( name: clean, subdirectory: tainted) ) !) // $ MISSING: tainted=210
349
+ sink ( arg: URL ( filePath: tainted) ) // $ tainted=210
350
+ sink ( arg: URL ( filePath: tainted, relativeTo: nil ) ) // $ tainted=210
351
+ sink ( arg: URL ( filePath: clean, relativeTo: urlTainted) ) // $ tainted=210
352
+ sink ( arg: try ! URL ( resolvingAliasFileAt: urlTainted) ) // $ tainted=210
353
+ sink ( arg: URL ( resource: URLResource ( name: tainted) ) !) // $ tainted=210
354
+ sink ( arg: URL ( resource: URLResource ( name: clean, subdirectory: tainted) ) !) // $ tainted=210
355
355
356
356
let dataClean = Data ( clean)
357
357
let dataTainted = Data ( tainted)
358
358
var stale = true
359
- sink ( arg: URL ( dataRepresentation: dataTainted, relativeTo: urlClean) !) // $ MISSING: tainted=210
360
- sink ( arg: URL ( dataRepresentation: dataClean, relativeTo: urlTainted) !) // $ MISSING: tainted=210
361
- sink ( arg: try ! URL ( resolvingBookmarkData: dataTainted, bookmarkDataIsStale: & stale) ) // $ MISSING: tainted=210
362
- sink ( arg: try ! URL ( resolvingBookmarkData: dataClean, relativeTo: urlTainted, bookmarkDataIsStale: & stale) ) // $ MISSING: tainted=210
363
-
364
- sink ( string: urlTainted. formatted ( ) ) // $ MISSING: tainted=210
365
- sink ( string: urlTainted. fragment ( ) !) // $ MISSING: tainted=210
366
- sink ( string: urlTainted. host ( ) !) // $ MISSING: tainted=210
367
- sink ( string: urlTainted. password ( ) !) // $ MISSING: tainted=210
368
- sink ( string: urlTainted. path ( ) ) // $ MISSING: tainted=210
369
- sink ( string: urlTainted. query ( ) !) // $ MISSING: tainted=210
370
- sink ( string: urlTainted. user ( ) !) // $ MISSING: tainted=210
359
+ sink ( arg: URL ( dataRepresentation: dataTainted, relativeTo: urlClean) !) // $ tainted=210
360
+ sink ( arg: URL ( dataRepresentation: dataClean, relativeTo: urlTainted) !) // $ tainted=210
361
+ sink ( arg: try ! URL ( resolvingBookmarkData: dataTainted, bookmarkDataIsStale: & stale) ) // $ tainted=210
362
+ sink ( arg: try ! URL ( resolvingBookmarkData: dataClean, relativeTo: urlTainted, bookmarkDataIsStale: & stale) ) // $ tainted=210
363
+
364
+ sink ( string: urlTainted. formatted ( ) ) // $ tainted=210
365
+ sink ( string: urlTainted. fragment ( ) !) // $ tainted=210
366
+ sink ( string: urlTainted. host ( ) !) // $ tainted=210
367
+ sink ( string: urlTainted. password ( ) !) // $ tainted=210
368
+ sink ( string: urlTainted. path ( ) ) // $ tainted=210
369
+ sink ( string: urlTainted. query ( ) !) // $ tainted=210
370
+ sink ( string: urlTainted. user ( ) !) // $ tainted=210
371
371
372
372
var url1 = URL ( string: clean) !
373
373
if let values = try ? urlClean. resourceValues ( forKeys: [ ] ) {
@@ -377,29 +377,29 @@ func taintThroughURL() {
377
377
if let values = try ? urlTainted. resourceValues ( forKeys: [ ] ) {
378
378
try ! url1. setResourceValues ( values)
379
379
}
380
- sink ( arg: url1) // $ MISSING: tainted=210
380
+ sink ( arg: url1) // $ tainted=210
381
381
382
382
var url2 = URL ( string: clean) !
383
- url2. setTemporaryResourceValue ( source ( ) as Sendable , forKey: URL . URLResourceKey ( " " ) )
384
- sink ( arg: url2) // $ MISSING: tainted=210
383
+ url2. setTemporaryResourceValue ( source ( ) , forKey: URL . URLResourceKey ( " " ) )
384
+ sink ( arg: url2) // $ tainted=383
385
385
386
386
var url3 = URL ( string: clean) !
387
387
url3. appendPathComponent ( clean)
388
388
sink ( arg: url3)
389
389
url3. appendPathComponent ( tainted)
390
- sink ( arg: url3) // $ MISSING: tainted=210
390
+ sink ( arg: url3) // $ tainted=210
391
391
392
392
var url4 = URL ( string: clean) !
393
393
url4. appendPathComponent ( tainted, isDirectory: false )
394
- sink ( arg: url4) // $ MISSING: tainted=210
394
+ sink ( arg: url4) // $ tainted=210
395
395
396
396
var url5 = URL ( string: clean) !
397
397
url5. appendPathExtension ( tainted)
398
- sink ( arg: url5) // $ MISSING: tainted=210
398
+ sink ( arg: url5) // $ tainted=210
399
399
400
400
var url6 = URL ( string: clean) !
401
401
url6. append ( component: tainted)
402
- sink ( arg: url6) // $ MISSING: tainted=210
402
+ sink ( arg: url6) // $ tainted=210
403
403
404
404
var url7 = URL ( string: clean) !
405
405
url7. append ( components: tainted)
@@ -411,19 +411,19 @@ func taintThroughURL() {
411
411
412
412
var url9 = URL ( string: clean) !
413
413
url9. append ( path: tainted)
414
- sink ( arg: url9) // $ MISSING: tainted=210
414
+ sink ( arg: url9) // $ tainted=210
415
415
416
416
var url10 = URL ( string: clean) !
417
417
url10. append ( queryItems: [ source ( ) as! URLQueryItem ] )
418
418
sink ( arg: url10) // $ MISSING: tainted=210
419
419
420
- sink ( data: try ! urlTainted. bookmarkData ( ) ) // $ MISSING: tainted=210
421
- sink ( data: try ! URL . bookmarkData ( withContentsOf: urlTainted) ) // $ MISSING: tainted=210
422
- sink ( any: URL . resourceValues ( forKeys: [ ] , fromBookmarkData: dataTainted) !) // $ MISSING: tainted=210
420
+ sink ( data: try ! urlTainted. bookmarkData ( ) ) // $ tainted=210
421
+ sink ( data: try ! URL . bookmarkData ( withContentsOf: urlTainted) ) // $ tainted=210
422
+ sink ( any: URL . resourceValues ( forKeys: [ ] , fromBookmarkData: dataTainted) !) // $ tainted=210
423
423
424
424
sink ( arg: URL . homeDirectory) // (static var, not tainted)
425
425
sink ( arg: URL . homeDirectory ( forUser: clean) !)
426
- sink ( arg: URL . homeDirectory ( forUser: tainted) !) // $ MISSING: tainted=210
426
+ sink ( arg: URL . homeDirectory ( forUser: tainted) !) // $ tainted=210
427
427
}
428
428
429
429
func taintThroughUrlRequest( ) {
@@ -481,9 +481,9 @@ func taintThroughUrlResource() {
481
481
let tainted = source ( ) as! URLResource
482
482
483
483
sink ( string: clean. name)
484
- sink ( string: tainted. name) // $ MISSING: tainted=481
484
+ sink ( string: tainted. name) // $ tainted=481
485
485
sink ( string: clean. subdirectory!)
486
- sink ( string: tainted. subdirectory!) // $ MISSING: tainted=481
486
+ sink ( string: tainted. subdirectory!) // $ tainted=481
487
487
}
488
488
489
489
func taintUrlAsync( ) async throws {
0 commit comments