Skip to content

Commit 60ac031

Browse files
authored
Merge pull request github#11036 from geoffw0/simplify3
2 parents 5198ad7 + d69d289 commit 60ac031

File tree

2 files changed

+22
-25
lines changed

2 files changed

+22
-25
lines changed

swift/ql/src/queries/Security/CWE-079/UnsafeWebViewFetch.ql

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -27,34 +27,34 @@ class Sink extends DataFlow::Node {
2727

2828
Sink() {
2929
exists(
30-
MethodDecl funcDecl, CallExpr call, string className, string funcName, string paramName,
31-
int arg, int baseUrlArg
30+
MethodDecl funcDecl, CallExpr call, string className, string funcName, int arg, int baseArg
3231
|
3332
// arguments to method calls...
3433
(
3534
// `loadHTMLString`
3635
className = ["UIWebView", "WKWebView"] and
3736
funcName = "loadHTMLString(_:baseURL:)" and
38-
paramName = "string"
37+
arg = 0 and
38+
baseArg = 1
3939
or
4040
// `UIWebView.load`
4141
className = "UIWebView" and
4242
funcName = "load(_:mimeType:textEncodingName:baseURL:)" and
43-
paramName = "data"
43+
arg = 0 and
44+
baseArg = 3
4445
or
4546
// `WKWebView.load`
4647
className = "WKWebView" and
4748
funcName = "load(_:mimeType:characterEncodingName:baseURL:)" and
48-
paramName = "data"
49+
arg = 0 and
50+
baseArg = 3
4951
) and
5052
call.getStaticTarget() = funcDecl and
5153
// match up `funcName`, `paramName`, `arg`, `node`.
5254
funcDecl.hasQualifiedName(className, funcName) and
53-
funcDecl.getParam(pragma[only_bind_into](arg)).getName() = paramName and
54-
call.getArgument(pragma[only_bind_into](arg)).getExpr() = this.asExpr() and
55+
call.getArgument(arg).getExpr() = this.asExpr() and
5556
// match up `baseURLArg`
56-
funcDecl.getParam(pragma[only_bind_into](baseUrlArg)).getName() = "baseURL" and
57-
call.getArgument(pragma[only_bind_into](baseUrlArg)).getExpr() = baseUrl
57+
call.getArgument(baseArg).getExpr() = baseUrl
5858
)
5959
}
6060

swift/ql/src/queries/Security/CWE-135/StringLengthConflation.ql

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)