@@ -159,11 +159,12 @@ struct URLRequest : CustomStringConvertible, CustomDebugStringConvertible {
159159 enum NetworkServiceType { case none }
160160 enum Attribution { case none }
161161 var cachePolicy : CachePolicy = . none
162- var httpMethod : String = " "
163- var url : URL = URL ( string: " " ) !
164- var httpBody : Data = Data ( " " )
162+ var httpMethod : String ? = " "
163+ var url : URL ? = URL ( string: " " )
164+ var httpBody : Data ? = Data ( " " )
165165 var httpBodyStream : InputStream ? = nil
166166 var mainDocument : URL = URL ( string: " " ) !
167+ var mainDocumentURL : URL ? = URL ( string: " " )
167168 var allHTTPHeaderFields : [ String : String ] ? = nil
168169 var timeoutInterval : TimeInterval = TimeInterval ( )
169170 var httpShouldHandleCookies : Bool = false
@@ -204,7 +205,6 @@ func sink(data: Data) {}
204205func sink( string: String ) { }
205206func sink( int: Int ) { }
206207func sink( any: Any ) { }
207-
208208func taintThroughURL( ) {
209209 let clean = " http://example.com/ "
210210 let tainted = source ( ) as! String
@@ -436,14 +436,16 @@ func taintThroughUrlRequest() {
436436 sink ( any: tainted. cachePolicy)
437437 sink ( any: clean. httpMethod)
438438 sink ( any: tainted. httpMethod)
439- sink ( any: clean. url)
440- sink ( any: tainted. url) // $ tainted=431
441- sink ( any: clean. httpBody)
442- sink ( any: tainted. httpBody) // $ tainted=431
439+ sink ( any: clean. url! )
440+ sink ( any: tainted. url! ) // $ tainted=431
441+ sink ( any: clean. httpBody! )
442+ sink ( any: tainted. httpBody! ) // $ tainted=431
443443 sink ( any: clean. httpBodyStream!)
444444 sink ( any: tainted. httpBodyStream!) // $ tainted=431
445445 sink ( any: clean. mainDocument)
446446 sink ( any: tainted. mainDocument) // $ tainted=431
447+ sink ( any: clean. mainDocumentURL!)
448+ sink ( any: tainted. mainDocumentURL!) // $ MISSING: tainted=431
447449 sink ( any: clean. allHTTPHeaderFields!)
448450 sink ( any: tainted. allHTTPHeaderFields!) // $ tainted=431
449451 sink ( any: clean. timeoutInterval)
@@ -481,19 +483,19 @@ func taintThroughUrlResource() {
481483 let tainted = source ( ) as! URLResource
482484
483485 sink ( string: clean. name)
484- sink ( string: tainted. name) // $ tainted=481
486+ sink ( string: tainted. name) // $ tainted=483
485487 sink ( string: clean. subdirectory!)
486- sink ( string: tainted. subdirectory!) // $ tainted=481
488+ sink ( string: tainted. subdirectory!) // $ tainted=483
487489}
488490
489491func taintUrlAsync( ) async throws {
490492 let tainted = source ( ) as! String
491493 let urlTainted = URL ( string: tainted) !
492494
493- sink ( any: urlTainted. lines) // $ tainted=490
495+ sink ( any: urlTainted. lines) // $ tainted=492
494496
495497 for try await line in urlTainted. lines {
496- sink ( string: line) // $ MISSING: tainted=490
498+ sink ( string: line) // $ MISSING: tainted=492
497499 }
498500}
499501
@@ -510,5 +512,5 @@ func closureReturnValue() {
510512 ptr in
511513 return source ( ) as! String
512514 } )
513- sink ( string: r2) // $ tainted=511
515+ sink ( string: r2) // $ tainted=513
514516}
0 commit comments