@@ -25,8 +25,8 @@ protocol NSMutableCopying {
25
25
26
26
class NSString : NSObject , NSCopying , NSMutableCopying {
27
27
struct EncodingConversionOptions : OptionSet { let rawValue : Int }
28
-
29
28
struct CompareOptions : OptionSet { let rawValue : Int }
29
+ struct EnumerationOptions : OptionSet { let rawValue : Int }
30
30
31
31
init ( characters: UnsafePointer < unichar > , length: Int ) { }
32
32
init ( charactersNoCopy characters: UnsafeMutablePointer < unichar > , length: Int , freeWhenDone freeBuffer: Bool ) { }
@@ -83,6 +83,7 @@ class NSString : NSObject, NSCopying, NSMutableCopying {
83
83
func folding( options: NSString . CompareOptions = [ ] , locale: Locale ? ) -> String { return " " }
84
84
func applyingTransform( _ transform: StringTransform , reverse: Bool ) -> String ? { return " " }
85
85
func enumerateLines( _ block: @escaping ( String , UnsafeMutablePointer < ObjCBool > ) -> Void ) { }
86
+ func enumerateSubstrings( in range: NSRange , options opts: NSString . EnumerationOptions = [ ] , using block: @escaping ( String ? , NSRange , NSRange , UnsafeMutablePointer < ObjCBool > ) -> Void ) { }
86
87
func replacingOccurrences( of target: String , with replacement: String ) -> String { return " " }
87
88
func replacingOccurrences( of target: String , with replacement: String , options: NSString . CompareOptions = [ ] , range searchRange: NSRange ) -> String { return " " }
88
89
func propertyList( ) -> Any { return 0 }
@@ -136,8 +137,7 @@ class NSMutableString : NSString {
136
137
func setString( _ aString: String ) { }
137
138
}
138
139
139
- class NSArray : NSObject {
140
- }
140
+ class NSArray : NSObject { }
141
141
142
142
struct _NSRange {
143
143
init ( location: Int , length: Int ) { }
@@ -485,3 +485,13 @@ func taintThroughData() {
485
485
let str2 = NSString ( data: data1, encoding: 0 ) !
486
486
sink ( arg: str2) // $ tainted=482
487
487
}
488
+
489
+ func moreTests( ) {
490
+ let myTainted = sourceNSString ( )
491
+ let myRange = NSRange ( location: 0 , length: 128 )
492
+
493
+ sink ( arg: myTainted. enumerateSubstrings ( in: myRange, options: [ ] , using: {
494
+ substring, substringRange, enclosingRange, stop in
495
+ sink ( arg: substring!) // $ MISSING: tainted=
496
+ } ) )
497
+ }
0 commit comments