Skip to content

Commit cc42f2f

Browse files
authored
Merge pull request github#8606 from asgerf/js/api-graph-api
JS/Python/Ruby: Document how API graphs should be interpreted
2 parents 7d171f8 + 87cbf7b commit cc42f2f

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

63 files changed

+411
-323
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,9 +144,9 @@ private module AccessPaths {
144144
not param = base.getReceiver()
145145
|
146146
result = param and
147-
name = param.getAnImmediateUse().asExpr().(Parameter).getName()
147+
name = param.asSource().asExpr().(Parameter).getName()
148148
or
149-
param.getAnImmediateUse().asExpr() instanceof DestructuringPattern and
149+
param.asSource().asExpr() instanceof DestructuringPattern and
150150
result = param.getMember(name)
151151
)
152152
}

javascript/ql/lib/semmle/javascript/ApiGraphs.qll

Lines changed: 180 additions & 57 deletions
Large diffs are not rendered by default.

javascript/ql/lib/semmle/javascript/JsonParsers.qll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ private class PlainJsonParserCall extends JsonParserCall {
2929
callee =
3030
DataFlow::moduleMember(["json3", "json5", "flatted", "teleport-javascript", "json-cycle"],
3131
"parse") or
32-
callee = API::moduleImport("replicator").getInstance().getMember("decode").getAnImmediateUse() or
32+
callee = API::moduleImport("replicator").getInstance().getMember("decode").asSource() or
3333
callee = DataFlow::moduleImport("parse-json") or
3434
callee = DataFlow::moduleImport("json-parse-better-errors") or
3535
callee = DataFlow::moduleImport("json-safe-parse") or

javascript/ql/lib/semmle/javascript/JsonSchema.qll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ module JsonSchema {
134134
.ref()
135135
.getMember(["addSchema", "validate", "compile", "compileAsync"])
136136
.getParameter(0)
137-
.getARhs()
137+
.asSink()
138138
}
139139
}
140140
}
@@ -184,7 +184,7 @@ module JsonSchema {
184184
override boolean getPolarity() { none() }
185185

186186
override DataFlow::Node getAValidationResultAccess(boolean polarity) {
187-
result = this.getReturn().getMember("error").getAnImmediateUse() and
187+
result = this.getReturn().getMember("error").asSource() and
188188
polarity = false
189189
}
190190
}

javascript/ql/lib/semmle/javascript/JsonStringifiers.qll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ class JsonStringifyCall extends DataFlow::CallNode {
1414
callee =
1515
DataFlow::moduleMember(["json3", "json5", "flatted", "teleport-javascript", "json-cycle"],
1616
"stringify") or
17-
callee = API::moduleImport("replicator").getInstance().getMember("encode").getAnImmediateUse() or
17+
callee = API::moduleImport("replicator").getInstance().getMember("encode").asSource() or
1818
callee =
1919
DataFlow::moduleImport([
2020
"json-stringify-safe", "json-stable-stringify", "stringify-object",

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@ module Babel {
198198
.getMember(["transform", "transformSync", "transformAsync"])
199199
.getACall() and
200200
pred = call.getArgument(0) and
201-
succ = [call, call.getParameter(2).getParameter(0).getAnImmediateUse()]
201+
succ = [call, call.getParameter(2).getParameter(0).asSource()]
202202
)
203203
}
204204
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ module Cheerio {
1414
}
1515

1616
/** Gets a reference to the `cheerio` function, possibly with a loaded DOM. */
17-
DataFlow::SourceNode cheerioRef() { result = cheerioApi().getAUse() }
17+
DataFlow::SourceNode cheerioRef() { result = cheerioApi().getAValueReachableFromSource() }
1818

1919
/**
2020
* A creation of `cheerio` object, a collection of virtual DOM elements

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,8 @@ module ClassValidator {
3939

4040
/** Holds if the given field has a decorator that sanitizes its value for the purpose of taint tracking. */
4141
predicate isFieldSanitizedByDecorator(FieldDefinition field) {
42-
field.getADecorator().getExpression().flow() = sanitizingDecorator().getReturn().getAUse()
42+
field.getADecorator().getExpression().flow() =
43+
sanitizingDecorator().getReturn().getAValueReachableFromSource()
4344
}
4445

4546
pragma[noinline]

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,7 @@ module ClientRequest {
265265
or
266266
responseType = this.getResponseType() and
267267
promise = false and
268-
result = this.getReturn().getPromisedError().getMember("response").getAnImmediateUse()
268+
result = this.getReturn().getPromisedError().getMember("response").asSource()
269269
}
270270
}
271271

@@ -463,7 +463,7 @@ module ClientRequest {
463463
*/
464464
private API::Node netSocketInstantiation(DataFlow::NewNode socket) {
465465
result = API::moduleImport("net").getMember("Socket").getInstance() and
466-
socket = result.getAnImmediateUse()
466+
socket = result.asSource()
467467
}
468468

469469
/**
@@ -827,7 +827,7 @@ module ClientRequest {
827827
class ApolloClientRequest extends ClientRequest::Range, API::InvokeNode {
828828
ApolloClientRequest() { this = apolloUriCallee().getAnInvocation() }
829829

830-
override DataFlow::Node getUrl() { result = this.getParameter(0).getMember("uri").getARhs() }
830+
override DataFlow::Node getUrl() { result = this.getParameter(0).getMember("uri").asSink() }
831831

832832
override DataFlow::Node getHost() { none() }
833833

@@ -848,10 +848,10 @@ module ClientRequest {
848848

849849
override DataFlow::Node getUrl() { result = this.getArgument(0) }
850850

851-
override DataFlow::Node getHost() { result = this.getParameter(0).getMember("host").getARhs() }
851+
override DataFlow::Node getHost() { result = this.getParameter(0).getMember("host").asSink() }
852852

853853
override DataFlow::Node getADataNode() {
854-
result = form.getMember("append").getACall().getParameter(1).getARhs()
854+
result = form.getMember("append").getACall().getParameter(1).asSink()
855855
}
856856
}
857857
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ private class CredentialsFromModel extends CredentialsExpr {
2121
string kind;
2222

2323
CredentialsFromModel() {
24-
this = ModelOutput::getASinkNode("credentials[" + kind + "]").getARhs().asExpr()
24+
this = ModelOutput::getASinkNode("credentials[" + kind + "]").asSink().asExpr()
2525
}
2626

2727
override string getCredentialsKind() { result = kind }

0 commit comments

Comments
 (0)