Skip to content

Commit 882adc8

Browse files
committed
JS: Set literals.
1 parent a82c76d commit 882adc8

File tree

12 files changed

+170
-668
lines changed

12 files changed

+170
-668
lines changed

javascript/ql/lib/semmle/javascript/DynamicPropertyAccess.qll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ private import semmle.javascript.dataflow.internal.FlowSteps
1414
SourceNode getAnEnumeratedArrayElement(SourceNode array) {
1515
exists(MethodCallNode call, string name |
1616
call = array.getAMethodCall(name) and
17-
(name = "forEach" or name = "map") and
17+
(name = ["forEach", "map"]) and
1818
result = call.getCallback(0).getParameter(0)
1919
)
2020
or

javascript/ql/lib/semmle/javascript/StandardLibrary.qll

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -55,13 +55,7 @@ private class ArrayIterationCallbackAsPartialInvoke extends DataFlow::PartialInv
5555
getNumArgument() = 2 and
5656
// Filter out library methods named 'forEach' etc
5757
not DataFlow::moduleImport(_).flowsTo(getReceiver()) and
58-
exists(string name | name = getMethodName() |
59-
name = "filter" or
60-
name = "forEach" or
61-
name = "map" or
62-
name = "some" or
63-
name = "every"
64-
)
58+
getMethodName() = ["filter", "forEach", "map", "some", "every"]
6559
}
6660

6761
override DataFlow::Node getBoundReceiver(DataFlow::Node callback) {

javascript/ql/lib/semmle/javascript/frameworks/AngularJS/AngularJSCore.qll

Lines changed: 21 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -177,15 +177,10 @@ class ModuleApiCallDependencyInjection extends DependencyInjection {
177177
* This method excludes the method names that are also present on the AngularJS '$provide' object.
178178
*/
179179
private int injectableArgPos() {
180-
(
181-
methodName = "directive" or
182-
methodName = "filter" or
183-
methodName = "controller" or
184-
methodName = "animation"
185-
) and
180+
methodName = ["directive", "filter", "controller", "animation"] and
186181
result = 1
187182
or
188-
(methodName = "config" or methodName = "run") and
183+
methodName = ["config", "run"] and
189184
result = 0
190185
}
191186

@@ -199,64 +194,17 @@ class ModuleApiCallDependencyInjection extends DependencyInjection {
199194
* (cf. https://docs.angularjs.org/api/ng/directive/).
200195
*/
201196
private predicate builtinDirective(string name) {
202-
name = "ngApp" or
203-
name = "ngBind" or
204-
name = "ngBindHtml" or
205-
name = "ngBindTemplate" or
206-
name = "ngBlur" or
207-
name = "ngChange" or
208-
name = "ngChecked" or
209-
name = "ngClass" or
210-
name = "ngClassEven" or
211-
name = "ngClassOdd" or
212-
name = "ngClick" or
213-
name = "ngCloak" or
214-
name = "ngController" or
215-
name = "ngCopy" or
216-
name = "ngCsp" or
217-
name = "ngCut" or
218-
name = "ngDblclick" or
219-
name = "ngDisabled" or
220-
name = "ngFocus" or
221-
name = "ngForm" or
222-
name = "ngHide" or
223-
name = "ngHref" or
224-
name = "ngIf" or
225-
name = "ngInclude" or
226-
name = "ngInit" or
227-
name = "ngJq" or
228-
name = "ngKeydown" or
229-
name = "ngKeypress" or
230-
name = "ngKeyup" or
231-
name = "ngList" or
232-
name = "ngMaxlength" or
233-
name = "ngMinlength" or
234-
name = "ngModel" or
235-
name = "ngModelOptions" or
236-
name = "ngMousedown" or
237-
name = "ngMouseenter" or
238-
name = "ngMouseleave" or
239-
name = "ngMousemove" or
240-
name = "ngMouseover" or
241-
name = "ngMouseup" or
242-
name = "ngNonBindable" or
243-
name = "ngOpen" or
244-
name = "ngOptions" or
245-
name = "ngPaste" or
246-
name = "ngPattern" or
247-
name = "ngPluralize" or
248-
name = "ngReadonly" or
249-
name = "ngRepeat" or
250-
name = "ngRequired" or
251-
name = "ngSelected" or
252-
name = "ngShow" or
253-
name = "ngSrc" or
254-
name = "ngSrcset" or
255-
name = "ngStyle" or
256-
name = "ngSubmit" or
257-
name = "ngSwitch" or
258-
name = "ngTransclude" or
259-
name = "ngValue"
197+
name =
198+
[
199+
"ngApp", "ngBind", "ngBindHtml", "ngBindTemplate", "ngBlur", "ngChange", "ngChecked",
200+
"ngClass", "ngClassEven", "ngClassOdd", "ngClick", "ngCloak", "ngController", "ngCopy",
201+
"ngCsp", "ngCut", "ngDblclick", "ngDisabled", "ngFocus", "ngForm", "ngHide", "ngHref", "ngIf",
202+
"ngInclude", "ngInit", "ngJq", "ngKeydown", "ngKeypress", "ngKeyup", "ngList", "ngMaxlength",
203+
"ngMinlength", "ngModel", "ngModelOptions", "ngMousedown", "ngMouseenter", "ngMouseleave",
204+
"ngMousemove", "ngMouseover", "ngMouseup", "ngNonBindable", "ngOpen", "ngOptions", "ngPaste",
205+
"ngPattern", "ngPluralize", "ngReadonly", "ngRepeat", "ngRequired", "ngSelected", "ngShow",
206+
"ngSrc", "ngSrcset", "ngStyle", "ngSubmit", "ngSwitch", "ngTransclude", "ngValue"
207+
]
260208
}
261209

262210
private newtype TDirectiveInstance =
@@ -676,10 +624,7 @@ private class JQLiteObject extends JQuery::ObjectSource::Range {
676624
)
677625
)
678626
or
679-
exists(ServiceReference element |
680-
element.getName() = "$rootElement" or
681-
element.getName() = "$document"
682-
|
627+
exists(ServiceReference element | element.getName() = ["$rootElement", "$document"] |
683628
this = element.getAReference()
684629
)
685630
}
@@ -780,23 +725,17 @@ private class BuiltinServiceCall extends AngularJSCall {
780725

781726
override predicate interpretsArgumentAsCode(Expr e) {
782727
exists(ScopeServiceReference scope, string methodName |
783-
methodName = "$apply" or
784-
methodName = "$applyAsync" or
785-
methodName = "$eval" or
786-
methodName = "$evalAsync" or
787-
methodName = "$watch" or
788-
methodName = "$watchCollection" or
789-
methodName = "$watchGroup"
728+
methodName =
729+
[
730+
"$apply", "$applyAsync", "$eval", "$evalAsync", "$watch", "$watchCollection",
731+
"$watchGroup"
732+
]
790733
|
791734
call = scope.getAMethodCall(methodName) and
792735
e = call.getArgument(0)
793736
)
794737
or
795-
exists(ServiceReference service |
796-
service.getName() = "$compile" or
797-
service.getName() = "$parse" or
798-
service.getName() = "$interpolate"
799-
|
738+
exists(ServiceReference service | service.getName() = ["$compile", "$parse", "$interpolate"] |
800739
call = service.getACall() and
801740
e = call.getArgument(0)
802741
)
@@ -952,7 +891,7 @@ class ElementScope extends AngularScope, MkElementScope {
952891
DataFlow::SourceNode routeProviderRef() {
953892
result = builtinServiceRef("$routeProvider")
954893
or
955-
exists(string m | m = "when" or m = "otherwise" | result = routeProviderRef().getAMethodCall(m))
894+
exists(string m | m = ["when", "otherwise"] | result = routeProviderRef().getAMethodCall(m))
956895
}
957896

958897
/**

javascript/ql/lib/semmle/javascript/frameworks/AngularJS/AngularJSExpressions.qll

Lines changed: 5 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -277,24 +277,11 @@ private module Lexer {
277277
override string getPattern() {
278278
result =
279279
concat(string op |
280-
op = "===" or
281-
op = "!==" or
282-
op = "==" or
283-
op = "!=" or
284-
op = "<=" or
285-
op = ">=" or
286-
op = "&&" or
287-
op = "||" or
288-
op = "*" or
289-
op = "!" or
290-
op = "=" or
291-
op = "<" or
292-
op = ">" or
293-
op = "+" or
294-
op = "-" or
295-
op = "/" or
296-
op = "%" or
297-
op = "|"
280+
op =
281+
[
282+
"===", "!==", "==", "!=", "<=", ">=", "&&", "||", "*", "!", "=", "<", ">", "+", "-",
283+
"/", "%", "|"
284+
]
298285
|
299286
"\\Q" + op + "\\E", "|" order by op.length() desc
300287
)

javascript/ql/lib/semmle/javascript/frameworks/AsyncPackage.qll

Lines changed: 7 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -103,25 +103,12 @@ module AsyncPackage {
103103

104104
IterationCall() {
105105
this = memberVariant(name).getACall() and
106-
(
107-
name = "concat" or
108-
name = "detect" or
109-
name = "each" or
110-
name = "eachOf" or
111-
name = "forEach" or
112-
name = "forEachOf" or
113-
name = "every" or
114-
name = "filter" or
115-
name = "groupBy" or
116-
name = "map" or
117-
name = "mapValues" or
118-
name = "reduce" or
119-
name = "reduceRight" or
120-
name = "reject" or
121-
name = "some" or
122-
name = "sortBy" or
123-
name = "transform"
124-
)
106+
name =
107+
[
108+
"concat", "detect", "each", "eachOf", "forEach", "forEachOf", "every", "filter",
109+
"groupBy", "map", "mapValues", "reduce", "reduceRight", "reject", "some", "sortBy",
110+
"transform"
111+
]
125112
}
126113

127114
/**
@@ -176,10 +163,7 @@ module AsyncPackage {
176163
pred = getLastParameter(iteratee).getACall().getArgument(i) and
177164
succ = final.getParameter(i) and
178165
exists(string name | name = call.getName() |
179-
name = "concat" or
180-
name = "map" or
181-
name = "reduce" or
182-
name = "reduceRight"
166+
name = ["concat", "map", "reduce", "reduceRight"]
183167
)
184168
)
185169
}

javascript/ql/lib/semmle/javascript/frameworks/HTTP.qll

Lines changed: 8 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -81,44 +81,20 @@ module HTTP {
8181
*/
8282
class RequestMethodName extends string {
8383
RequestMethodName() {
84-
this = "CHECKOUT" or
85-
this = "COPY" or
86-
this = "DELETE" or
87-
this = "GET" or
88-
this = "HEAD" or
89-
this = "LOCK" or
90-
this = "MERGE" or
91-
this = "MKACTIVITY" or
92-
this = "MKCOL" or
93-
this = "MOVE" or
94-
this = "M-SEARCH" or
95-
this = "NOTIFY" or
96-
this = "OPTIONS" or
97-
this = "PATCH" or
98-
this = "POST" or
99-
this = "PURGE" or
100-
this = "PUT" or
101-
this = "REPORT" or
102-
this = "SEARCH" or
103-
this = "SUBSCRIBE" or
104-
this = "TRACE" or
105-
this = "UNLOCK" or
106-
this = "UNSUBSCRIBE"
84+
this =
85+
[
86+
"CHECKOUT", "COPY", "DELETE", "GET", "HEAD", "LOCK", "MERGE", "MKACTIVITY", "MKCOL",
87+
"MOVE", "M-SEARCH", "NOTIFY", "OPTIONS", "PATCH", "POST", "PURGE", "PUT", "REPORT",
88+
"SEARCH", "SUBSCRIBE", "TRACE", "UNLOCK", "UNSUBSCRIBE"
89+
]
10790
}
10891

10992
/**
11093
* Holds if this kind of HTTP request should be considered free of side effects,
11194
* such as for `GET` and `HEAD` requests.
11295
*/
11396
predicate isSafe() {
114-
this = "GET" or
115-
this = "HEAD" or
116-
this = "OPTIONS" or
117-
this = "PRI" or
118-
this = "PROPFIND" or
119-
this = "REPORT" or
120-
this = "SEARCH" or
121-
this = "TRACE"
97+
this = ["GET", "HEAD", "OPTIONS", "PRI", "PROPFIND", "REPORT", "SEARCH", "TRACE"]
12298
}
12399
}
124100

@@ -477,13 +453,7 @@ module HTTP {
477453
* Headers are never considered third-party controllable by this predicate, although the
478454
* third party does have some control over the the Referer and Origin headers.
479455
*/
480-
predicate isThirdPartyControllable() {
481-
exists(string kind | kind = getKind() |
482-
kind = "parameter" or
483-
kind = "url" or
484-
kind = "body"
485-
)
486-
}
456+
predicate isThirdPartyControllable() { getKind() = ["parameter", "url", "body"] }
487457
}
488458

489459
/**

0 commit comments

Comments
 (0)