@@ -94,37 +94,35 @@ class StringLengthConflationConfiguration extends DataFlow::Configuration {
9494 * that sink. We actually want to report incorrect flow states.
9595 */
9696 predicate isSinkImpl ( DataFlow:: Node node , string flowstate ) {
97- exists (
98- AbstractFunctionDecl funcDecl , CallExpr call , string funcName , string paramName , int arg
99- |
97+ exists ( AbstractFunctionDecl funcDecl , CallExpr call , string funcName , int arg |
10098 (
10199 // arguments to method calls...
102100 exists ( string className , ClassOrStructDecl c |
103101 (
104102 // `NSRange.init`
105103 className = "NSRange" and
106104 funcName = "init(location:length:)" and
107- paramName = [ "location" , "length" ]
105+ arg = [ 0 , 1 ]
108106 or
109107 // `NSString.character`
110108 className = [ "NSString" , "NSMutableString" ] and
111109 funcName = "character(at:)" and
112- paramName = "at"
110+ arg = 0
113111 or
114112 // `NSString.character`
115113 className = [ "NSString" , "NSMutableString" ] and
116114 funcName = "substring(from:)" and
117- paramName = "from"
115+ arg = 0
118116 or
119117 // `NSString.character`
120118 className = [ "NSString" , "NSMutableString" ] and
121119 funcName = "substring(to:)" and
122- paramName = "to"
120+ arg = 0
123121 or
124122 // `NSMutableString.insert`
125123 className = "NSMutableString" and
126124 funcName = "insert(_:at:)" and
127- paramName = "at"
125+ arg = 1
128126 ) and
129127 c .getName ( ) = className and
130128 c .getABaseTypeDecl * ( ) .( ClassOrStructDecl ) .getAMember ( ) = funcDecl and
@@ -135,39 +133,38 @@ class StringLengthConflationConfiguration extends DataFlow::Configuration {
135133 // arguments to function calls...
136134 // `NSMakeRange`
137135 funcName = "NSMakeRange(_:_:)" and
138- paramName = [ "loc" , "len" ] and
136+ arg = [ 0 , 1 ] and
139137 call .getStaticTarget ( ) = funcDecl and
140138 flowstate = "NSString"
141139 or
142140 // arguments to method calls...
143141 (
144142 // `String.dropFirst`, `String.dropLast`, `String.removeFirst`, `String.removeLast`
145143 funcName = [ "dropFirst(_:)" , "dropLast(_:)" , "removeFirst(_:)" , "removeLast(_:)" ] and
146- paramName = "k"
144+ arg = 0
147145 or
148146 // `String.prefix`, `String.suffix`
149147 funcName = [ "prefix(_:)" , "suffix(_:)" ] and
150- paramName = "maxLength"
148+ arg = 0
151149 or
152150 // `String.Index.init`
153151 funcName = "init(encodedOffset:)" and
154- paramName = "offset"
152+ arg = 0
155153 or
156154 // `String.index`
157155 funcName = [ "index(_:offsetBy:)" , "index(_:offsetBy:limitBy:)" ] and
158- paramName = [ "n" , "distance" ]
156+ arg = [ 0 , 1 ]
159157 or
160158 // `String.formIndex`
161159 funcName = [ "formIndex(_:offsetBy:)" , "formIndex(_:offsetBy:limitBy:)" ] and
162- paramName = "distance"
160+ arg = [ 0 , 1 ]
163161 ) and
164162 call .getStaticTarget ( ) = funcDecl and
165163 flowstate = "String"
166164 ) and
167165 // match up `funcName`, `paramName`, `arg`, `node`.
168166 funcDecl .getName ( ) = funcName and
169- funcDecl .getParam ( pragma [ only_bind_into ] ( arg ) ) .getName ( ) = paramName and
170- call .getArgument ( pragma [ only_bind_into ] ( arg ) ) .getExpr ( ) = node .asExpr ( )
167+ call .getArgument ( arg ) .getExpr ( ) = node .asExpr ( )
171168 )
172169 }
173170
0 commit comments