@@ -277,13 +277,13 @@ func taintThroughURL() {
277277 sink ( data: data!) // $ tainted=210
278278 }
279279
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
287287
288288 let _ = clean. withCString ( {
289289 ptrClean in
@@ -295,27 +295,27 @@ func taintThroughURL() {
295295 sink ( arg: URL ( fileURLWithFileSystemRepresentation: ptrTainted, isDirectory: false , relativeTo: nil ) ) // $ MISSING: tainted=210
296296 } )
297297
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
301301
302302 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
310310 }
311311 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
319319 }
320320
321321 urlClean. withUnsafeFileSystemRepresentation ( {
@@ -327,47 +327,47 @@ func taintThroughURL() {
327327 sink ( any: ptr!) // $ MISSING: tainted=210
328328 } )
329329
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
342342 sink ( arg: urlClean. appending ( components: tainted) ) // $ MISSING: tainted=210
343343 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
347347 sink ( arg: urlClean. appending ( queryItems: [ source ( ) as! URLQueryItem ] ) ) // $ MISSING: tainted=210
348348
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
355355
356356 let dataClean = Data ( clean)
357357 let dataTainted = Data ( tainted)
358358 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
371371
372372 var url1 = URL ( string: clean) !
373373 if let values = try ? urlClean. resourceValues ( forKeys: [ ] ) {
@@ -377,29 +377,29 @@ func taintThroughURL() {
377377 if let values = try ? urlTainted. resourceValues ( forKeys: [ ] ) {
378378 try ! url1. setResourceValues ( values)
379379 }
380- sink ( arg: url1) // $ MISSING: tainted=210
380+ sink ( arg: url1) // $ tainted=210
381381
382382 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
385385
386386 var url3 = URL ( string: clean) !
387387 url3. appendPathComponent ( clean)
388388 sink ( arg: url3)
389389 url3. appendPathComponent ( tainted)
390- sink ( arg: url3) // $ MISSING: tainted=210
390+ sink ( arg: url3) // $ tainted=210
391391
392392 var url4 = URL ( string: clean) !
393393 url4. appendPathComponent ( tainted, isDirectory: false )
394- sink ( arg: url4) // $ MISSING: tainted=210
394+ sink ( arg: url4) // $ tainted=210
395395
396396 var url5 = URL ( string: clean) !
397397 url5. appendPathExtension ( tainted)
398- sink ( arg: url5) // $ MISSING: tainted=210
398+ sink ( arg: url5) // $ tainted=210
399399
400400 var url6 = URL ( string: clean) !
401401 url6. append ( component: tainted)
402- sink ( arg: url6) // $ MISSING: tainted=210
402+ sink ( arg: url6) // $ tainted=210
403403
404404 var url7 = URL ( string: clean) !
405405 url7. append ( components: tainted)
@@ -411,19 +411,19 @@ func taintThroughURL() {
411411
412412 var url9 = URL ( string: clean) !
413413 url9. append ( path: tainted)
414- sink ( arg: url9) // $ MISSING: tainted=210
414+ sink ( arg: url9) // $ tainted=210
415415
416416 var url10 = URL ( string: clean) !
417417 url10. append ( queryItems: [ source ( ) as! URLQueryItem ] )
418418 sink ( arg: url10) // $ MISSING: tainted=210
419419
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
423423
424424 sink ( arg: URL . homeDirectory) // (static var, not tainted)
425425 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
427427}
428428
429429func taintThroughUrlRequest( ) {
@@ -481,9 +481,9 @@ func taintThroughUrlResource() {
481481 let tainted = source ( ) as! URLResource
482482
483483 sink ( string: clean. name)
484- sink ( string: tainted. name) // $ MISSING: tainted=481
484+ sink ( string: tainted. name) // $ tainted=481
485485 sink ( string: clean. subdirectory!)
486- sink ( string: tainted. subdirectory!) // $ MISSING: tainted=481
486+ sink ( string: tainted. subdirectory!) // $ tainted=481
487487}
488488
489489func taintUrlAsync( ) async throws {
0 commit comments