Skip to content

Commit 024c690

Browse files
committed
refactor miscellaneous expression uses to dataflow nodes
1 parent 446896b commit 024c690

File tree

9 files changed

+35
-34
lines changed

9 files changed

+35
-34
lines changed

javascript/ql/experimental/adaptivethreatmodeling/lib/experimental/adaptivethreatmodeling/CoreKnowledge.qll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ predicate isOtherModeledArgument(DataFlow::Node n, FilteringReason reason) {
175175
or
176176
n instanceof CryptographicKey and reason instanceof CryptographicKeyReason
177177
or
178-
any(CryptographicOperation op).getInput().flow() = n and
178+
any(CryptographicOperation op).getInput() = n and
179179
reason instanceof CryptographicOperationFlowReason
180180
or
181181
exists(DataFlow::CallNode call | n = call.getAnArgument() |

javascript/ql/experimental/adaptivethreatmodeling/lib/experimental/adaptivethreatmodeling/EndpointFeatures.qll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ private module AccessPaths {
144144
not param = base.getReceiver()
145145
|
146146
result = param and
147-
name = param.getAnImmediateUse().asExpr().(Parameter).getName()
147+
name = param.getAnImmediateUse().(DataFlow::ParameterNode).getName()
148148
or
149149
param.getAnImmediateUse().asExpr() instanceof DestructuringPattern and
150150
result = param.getMember(name)

javascript/ql/lib/semmle/javascript/dataflow/Nodes.qll

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -562,6 +562,14 @@ class ObjectLiteralNode extends DataFlow::ValueNode, DataFlow::SourceNode {
562562
DataFlow::FunctionNode getPropertySetter(string name) {
563563
result = astNode.getPropertyByName(name).(PropertySetter).getInit().flow()
564564
}
565+
566+
/** Gets the value of a computed property name of this object literal, such as `x` in `{[x]: 1}` */
567+
DataFlow::Node getAComputedPropertyName() {
568+
exists(Property prop | prop = astNode.getAProperty() |
569+
prop.isComputed() and
570+
result = prop.getNameExpr().flow()
571+
)
572+
}
565573
}
566574

567575
/**

javascript/ql/lib/semmle/javascript/dataflow/TaintTracking.qll

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -516,17 +516,13 @@ module TaintTracking {
516516
*/
517517
private class HeapTaintStep extends SharedTaintStep {
518518
override predicate heapStep(DataFlow::Node pred, DataFlow::Node succ) {
519-
exists(Expr e, Expr f | e = succ.asExpr() and f = pred.asExpr() |
520-
exists(Property prop | e.(ObjectExpr).getAProperty() = prop |
521-
prop.isComputed() and f = prop.getNameExpr()
522-
)
523-
or
524-
// spreading a tainted object into an object literal gives a tainted object
525-
e.(ObjectExpr).getAProperty().(SpreadProperty).getInit().(SpreadElement).getOperand() = f
526-
or
527-
// spreading a tainted value into an array literal gives a tainted array
528-
e.(ArrayExpr).getAnElement().(SpreadElement).getOperand() = f
529-
)
519+
succ.(DataFlow::ObjectLiteralNode).getAComputedPropertyName() = pred
520+
or
521+
// spreading a tainted object into an object literal gives a tainted object
522+
succ.(DataFlow::ObjectLiteralNode).getASpreadProperty() = pred
523+
or
524+
// spreading a tainted value into an array literal gives a tainted array
525+
succ.(DataFlow::ArrayCreationNode).getASpreadArgument() = pred
530526
or
531527
// arrays with tainted elements and objects with tainted property names are tainted
532528
succ.(DataFlow::ArrayCreationNode).getAnElement() = pred and

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

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ private class TrackStringsInAngularCode extends DataFlow::SourceNode::Range, Dat
6868
*/
6969
private DataFlow::CallNode angularModuleCall(string name) {
7070
result = angular().getAMemberCall("module") and
71-
result.getArgument(0).asExpr().mayHaveStringValue(name)
71+
result.getArgument(0).mayHaveStringValue(name)
7272
}
7373

7474
/**
@@ -280,7 +280,7 @@ abstract class CustomDirective extends DirectiveInstance {
280280
InjectableFunction getController() { result = this.getMember("controller") }
281281

282282
/** Gets the template URL of this directive, if any. */
283-
string getTemplateUrl() { this.getMember("templateUrl").asExpr().mayHaveStringValue(result) }
283+
string getTemplateUrl() { this.getMember("templateUrl").mayHaveStringValue(result) }
284284

285285
/**
286286
* Gets a template file for this directive, if any.
@@ -298,9 +298,7 @@ abstract class CustomDirective extends DirectiveInstance {
298298
else result = DirectiveInstance.super.getAScope()
299299
}
300300

301-
private string getRestrictionString() {
302-
this.getMember("restrict").asExpr().mayHaveStringValue(result)
303-
}
301+
private string getRestrictionString() { this.getMember("restrict").mayHaveStringValue(result) }
304302

305303
private predicate hasTargetType(DirectiveTargetType type) {
306304
not exists(this.getRestrictionString()) or
@@ -383,10 +381,12 @@ class GeneralDirective extends CustomDirective, MkCustomDirective {
383381
override DataFlow::FunctionNode getALinkFunction() { result = this.getLinkFunction(_) }
384382

385383
override predicate bindsToController() {
386-
this.getMemberInit("bindToController").asExpr().mayHaveBooleanValue(true)
384+
this.getMemberInit("bindToController").mayHaveBooleanValue(true)
387385
}
388386

389-
override predicate hasIsolateScope() { this.getMember("scope").asExpr() instanceof ObjectExpr }
387+
override predicate hasIsolateScope() {
388+
this.getMember("scope") instanceof DataFlow::ObjectLiteralNode
389+
}
390390
}
391391

392392
/**
@@ -930,9 +930,7 @@ class RouteSetup extends DataFlow::CallNode, DependencyInjection {
930930
|
931931
result = controllerProperty
932932
or
933-
exists(ControllerDefinition def |
934-
controllerProperty.asExpr().mayHaveStringValue(def.getName())
935-
|
933+
exists(ControllerDefinition def | controllerProperty.mayHaveStringValue(def.getName()) |
936934
result = def.getAService()
937935
)
938936
)
@@ -1012,15 +1010,15 @@ private class RouteInstantiatedController extends Controller {
10121010

10131011
override predicate boundTo(DOM::ElementDefinition elem) {
10141012
exists(string url, HTML::HtmlFile template |
1015-
setup.getRouteParam("templateUrl").asExpr().mayHaveStringValue(url) and
1013+
setup.getRouteParam("templateUrl").mayHaveStringValue(url) and
10161014
template.getAbsolutePath().regexpMatch(".*\\Q" + url + "\\E") and
10171015
elem.getFile() = template
10181016
)
10191017
}
10201018

10211019
override predicate boundToAs(DOM::ElementDefinition elem, string name) {
10221020
this.boundTo(elem) and
1023-
setup.getRouteParam("controllerAs").asExpr().mayHaveStringValue(name)
1021+
setup.getRouteParam("controllerAs").mayHaveStringValue(name)
10241022
}
10251023
}
10261024

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,7 @@ abstract class RecipeDefinition extends DataFlow::CallNode, CustomServiceDefinit
244244
this = moduleRef(_).getAMethodCall(methodName) or
245245
this = builtinServiceRef("$provide").getAMethodCall(methodName)
246246
) and
247-
getArgument(0).asExpr().mayHaveStringValue(name)
247+
getArgument(0).mayHaveStringValue(name)
248248
}
249249

250250
override string getName() { result = name }
@@ -281,7 +281,7 @@ private predicate isCustomServiceDefinitionOnModule(
281281
DataFlow::Node factoryArgument
282282
) {
283283
mce = moduleRef(_).getAMethodCall(moduleMethodName) and
284-
mce.getArgument(0).asExpr().mayHaveStringValue(serviceName) and
284+
mce.getArgument(0).mayHaveStringValue(serviceName) and
285285
factoryArgument = mce.getArgument(1)
286286
}
287287

@@ -296,7 +296,7 @@ private predicate isCustomServiceDefinitionOnProvider(
296296
factoryArgument = mce.getOptionArgument(0, serviceName)
297297
or
298298
mce.getNumArgument() = 2 and
299-
mce.getArgument(0).asExpr().mayHaveStringValue(serviceName) and
299+
mce.getArgument(0).mayHaveStringValue(serviceName) and
300300
factoryArgument = mce.getArgument(1)
301301
)
302302
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -962,7 +962,7 @@ module Express {
962962
* Example: `fun` for `router1.use(fun)` or `router.use("/route", fun)`
963963
*/
964964
HTTP::RouteHandler getARouteHandler() {
965-
result.(DataFlow::SourceNode).flowsToExpr(this.getARouteSetup().getAnArgument().asExpr())
965+
result.(DataFlow::SourceNode).flowsTo(this.getARouteSetup().getAnArgument())
966966
}
967967

968968
/**

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

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,10 @@ module NextJS {
3535
*/
3636
Module getAModuleWithFallbackPaths() {
3737
result = getAPagesModule() and
38-
exists(DataFlow::FunctionNode staticPaths, Expr fallback |
38+
exists(DataFlow::FunctionNode staticPaths, DataFlow::Node fallback |
3939
staticPaths = result.getAnExportedValue("getStaticPaths").getAFunctionValue() and
40-
fallback =
41-
staticPaths.getAReturn().getALocalSource().getAPropertyWrite("fallback").getRhs().asExpr() and
42-
not fallback.(BooleanLiteral).getValue() = "false"
40+
fallback = staticPaths.getAReturn().getALocalSource().getAPropertyWrite("fallback").getRhs() and
41+
not fallback.mayHaveBooleanValue(false)
4342
)
4443
}
4544

javascript/ql/lib/semmle/javascript/security/dataflow/ExternalAPIUsedWithUntrustedDataCustomizations.qll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ module ExternalApiUsedWithUntrustedData {
165165
not param = base.getReceiver()
166166
|
167167
result = param and
168-
name = param.getAnImmediateUse().asExpr().(Parameter).getName()
168+
name = param.getAnImmediateUse().(DataFlow::ParameterNode).getName()
169169
or
170170
param.getAnImmediateUse().asExpr() instanceof DestructuringPattern and
171171
result = param.getMember(name)

0 commit comments

Comments
 (0)