@@ -25,8 +25,8 @@ protocol NSMutableCopying {
2525
2626class NSString : NSObject , NSCopying , NSMutableCopying {
2727 struct EncodingConversionOptions : OptionSet { let rawValue : Int }
28-
2928 struct CompareOptions : OptionSet { let rawValue : Int }
29+ struct EnumerationOptions : OptionSet { let rawValue : Int }
3030
3131 init ( characters: UnsafePointer < unichar > , length: Int ) { }
3232 init ( charactersNoCopy characters: UnsafeMutablePointer < unichar > , length: Int , freeWhenDone freeBuffer: Bool ) { }
@@ -83,6 +83,7 @@ class NSString : NSObject, NSCopying, NSMutableCopying {
8383 func folding( options: NSString . CompareOptions = [ ] , locale: Locale ? ) -> String { return " " }
8484 func applyingTransform( _ transform: StringTransform , reverse: Bool ) -> String ? { return " " }
8585 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 ) { }
8687 func replacingOccurrences( of target: String , with replacement: String ) -> String { return " " }
8788 func replacingOccurrences( of target: String , with replacement: String , options: NSString . CompareOptions = [ ] , range searchRange: NSRange ) -> String { return " " }
8889 func propertyList( ) -> Any { return 0 }
@@ -136,8 +137,7 @@ class NSMutableString : NSString {
136137 func setString( _ aString: String ) { }
137138}
138139
139- class NSArray : NSObject {
140- }
140+ class NSArray : NSObject { }
141141
142142struct _NSRange {
143143 init ( location: Int , length: Int ) { }
@@ -485,3 +485,13 @@ func taintThroughData() {
485485 let str2 = NSString ( data: data1, encoding: 0 ) !
486486 sink ( arg: str2) // $ tainted=482
487487}
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