@@ -94,35 +94,35 @@ class StringLengthConflationConfiguration extends DataFlow::Configuration {
94
94
* that sink. We actually want to report incorrect flow states.
95
95
*/
96
96
predicate isSinkImpl ( DataFlow:: Node node , string flowstate ) {
97
- exists ( AbstractFunctionDecl funcDecl , CallExpr call , string funcName , string paramName |
97
+ exists ( AbstractFunctionDecl funcDecl , CallExpr call , string funcName , int arg |
98
98
(
99
99
// arguments to method calls...
100
100
exists ( string className , ClassOrStructDecl c |
101
101
(
102
102
// `NSRange.init`
103
103
className = "NSRange" and
104
104
funcName = "init(location:length:)" and
105
- paramName = [ "location" , "length" ]
105
+ arg = [ 0 , 1 ]
106
106
or
107
107
// `NSString.character`
108
108
className = [ "NSString" , "NSMutableString" ] and
109
109
funcName = "character(at:)" and
110
- paramName = "at"
110
+ arg = 0
111
111
or
112
112
// `NSString.character`
113
113
className = [ "NSString" , "NSMutableString" ] and
114
114
funcName = "substring(from:)" and
115
- paramName = "from"
115
+ arg = 0
116
116
or
117
117
// `NSString.character`
118
118
className = [ "NSString" , "NSMutableString" ] and
119
119
funcName = "substring(to:)" and
120
- paramName = "to"
120
+ arg = 0
121
121
or
122
122
// `NSMutableString.insert`
123
123
className = "NSMutableString" and
124
124
funcName = "insert(_:at:)" and
125
- paramName = "at"
125
+ arg = 1
126
126
) and
127
127
c .getName ( ) = className and
128
128
c .getABaseTypeDecl * ( ) .( ClassOrStructDecl ) .getAMember ( ) = funcDecl and
@@ -133,38 +133,38 @@ class StringLengthConflationConfiguration extends DataFlow::Configuration {
133
133
// arguments to function calls...
134
134
// `NSMakeRange`
135
135
funcName = "NSMakeRange(_:_:)" and
136
- paramName = [ "loc" , "len" ] and
136
+ arg = [ 0 , 1 ] and
137
137
call .getStaticTarget ( ) = funcDecl and
138
138
flowstate = "NSString"
139
139
or
140
140
// arguments to method calls...
141
141
(
142
142
// `String.dropFirst`, `String.dropLast`, `String.removeFirst`, `String.removeLast`
143
143
funcName = [ "dropFirst(_:)" , "dropLast(_:)" , "removeFirst(_:)" , "removeLast(_:)" ] and
144
- paramName = "k"
144
+ arg = 0
145
145
or
146
146
// `String.prefix`, `String.suffix`
147
147
funcName = [ "prefix(_:)" , "suffix(_:)" ] and
148
- paramName = "maxLength"
148
+ arg = 0
149
149
or
150
150
// `String.Index.init`
151
151
funcName = "init(encodedOffset:)" and
152
- paramName = "offset"
152
+ arg = 0
153
153
or
154
154
// `String.index`
155
155
funcName = [ "index(_:offsetBy:)" , "index(_:offsetBy:limitBy:)" ] and
156
- paramName = [ "n" , "distance" ]
156
+ arg = [ 0 , 1 ]
157
157
or
158
158
// `String.formIndex`
159
159
funcName = [ "formIndex(_:offsetBy:)" , "formIndex(_:offsetBy:limitBy:)" ] and
160
- paramName = "distance"
160
+ arg = [ 0 , 1 ]
161
161
) and
162
162
call .getStaticTarget ( ) = funcDecl and
163
163
flowstate = "String"
164
164
) and
165
165
// match up `funcName`, `paramName`, `arg`, `node`.
166
166
funcDecl .getName ( ) = funcName and
167
- call .getArgumentByParamName ( paramName ) .getExpr ( ) = node .asExpr ( )
167
+ call .getArgument ( arg ) .getExpr ( ) = node .asExpr ( )
168
168
)
169
169
}
170
170
0 commit comments