@@ -159,11 +159,12 @@ struct URLRequest : CustomStringConvertible, CustomDebugStringConvertible {
159
159
enum NetworkServiceType { case none }
160
160
enum Attribution { case none }
161
161
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 ( " " )
165
165
var httpBodyStream : InputStream ? = nil
166
166
var mainDocument : URL = URL ( string: " " ) !
167
+ var mainDocumentURL : URL ? = URL ( string: " " )
167
168
var allHTTPHeaderFields : [ String : String ] ? = nil
168
169
var timeoutInterval : TimeInterval = TimeInterval ( )
169
170
var httpShouldHandleCookies : Bool = false
@@ -204,7 +205,6 @@ func sink(data: Data) {}
204
205
func sink( string: String ) { }
205
206
func sink( int: Int ) { }
206
207
func sink( any: Any ) { }
207
-
208
208
func taintThroughURL( ) {
209
209
let clean = " http://example.com/ "
210
210
let tainted = source ( ) as! String
@@ -436,14 +436,16 @@ func taintThroughUrlRequest() {
436
436
sink ( any: tainted. cachePolicy)
437
437
sink ( any: clean. httpMethod)
438
438
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
443
443
sink ( any: clean. httpBodyStream!)
444
444
sink ( any: tainted. httpBodyStream!) // $ tainted=431
445
445
sink ( any: clean. mainDocument)
446
446
sink ( any: tainted. mainDocument) // $ tainted=431
447
+ sink ( any: clean. mainDocumentURL!)
448
+ sink ( any: tainted. mainDocumentURL!) // $ tainted=431
447
449
sink ( any: clean. allHTTPHeaderFields!)
448
450
sink ( any: tainted. allHTTPHeaderFields!) // $ tainted=431
449
451
sink ( any: clean. timeoutInterval)
@@ -481,19 +483,19 @@ func taintThroughUrlResource() {
481
483
let tainted = source ( ) as! URLResource
482
484
483
485
sink ( string: clean. name)
484
- sink ( string: tainted. name) // $ tainted=481
486
+ sink ( string: tainted. name) // $ tainted=483
485
487
sink ( string: clean. subdirectory!)
486
- sink ( string: tainted. subdirectory!) // $ tainted=481
488
+ sink ( string: tainted. subdirectory!) // $ tainted=483
487
489
}
488
490
489
491
func taintUrlAsync( ) async throws {
490
492
let tainted = source ( ) as! String
491
493
let urlTainted = URL ( string: tainted) !
492
494
493
- sink ( any: urlTainted. lines) // $ tainted=490
495
+ sink ( any: urlTainted. lines) // $ tainted=492
494
496
495
497
for try await line in urlTainted. lines {
496
- sink ( string: line) // $ MISSING: tainted=490
498
+ sink ( string: line) // $ MISSING: tainted=492
497
499
}
498
500
}
499
501
@@ -510,5 +512,5 @@ func closureReturnValue() {
510
512
ptr in
511
513
return source ( ) as! String
512
514
} )
513
- sink ( string: r2) // $ tainted=511
515
+ sink ( string: r2) // $ tainted=513
514
516
}
0 commit comments