Skip to content

Commit fc54ba8

Browse files
committed
update the existing expression based Express models
1 parent 8266b08 commit fc54ba8

File tree

5 files changed

+86
-94
lines changed

5 files changed

+86
-94
lines changed

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

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -517,9 +517,10 @@ module Express {
517517
/**
518518
* Holds if `call` is a chainable method call on the response object of `handler`.
519519
*/
520-
private predicate isChainableResponseMethodCall(RouteHandler handler, MethodCallExpr call) {
521-
// TODO: DataFlow::MethodCallNode
522-
exists(string name | call.calls(handler.getAResponseNode().asExpr(), name) |
520+
private predicate isChainableResponseMethodCall(
521+
RouteHandler handler, DataFlow::MethodCallNode call
522+
) {
523+
exists(string name | call.calls(handler.getAResponseNode(), name) |
523524
name =
524525
[
525526
"append", "attachment", "location", "send", "sendStatus", "set", "status", "type", "vary",
@@ -541,7 +542,7 @@ module Express {
541542
ExplicitResponseSource() {
542543
this = rh.getResponseParameter()
543544
or
544-
isChainableResponseMethodCall(rh, this.asExpr())
545+
isChainableResponseMethodCall(rh, this)
545546
}
546547

547548
/**
@@ -766,23 +767,22 @@ module Express {
766767
/**
767768
* Holds if `e` is an HTTP request object.
768769
*/
769-
predicate isRequest(Expr e) { any(RouteHandler rh).getARequestNode().asExpr() = e } // TODO: DataFlow::Node
770+
predicate isRequest(DataFlow::Node e) { any(RouteHandler rh).getARequestNode() = e }
770771

771772
/**
772773
* Holds if `e` is an HTTP response object.
773774
*/
774-
predicate isResponse(Expr e) { any(RouteHandler rh).getAResponseNode().asExpr() = e } // TODO: DataFlow::Node
775+
predicate isResponse(DataFlow::Node e) { any(RouteHandler rh).getAResponseNode() = e }
775776

776777
/**
777778
* An access to the HTTP request body.
778779
*/
779-
class RequestBodyAccess extends Expr {
780-
// TODO: DataFlow::Node
781-
RequestBodyAccess() { any(RouteHandler h).getARequestBodyAccess().asExpr() = this }
780+
class RequestBodyAccess extends DataFlow::Node {
781+
RequestBodyAccess() { any(RouteHandler h).getARequestBodyAccess() = this }
782782
}
783783

784784
abstract private class HeaderDefinition extends HTTP::Servers::StandardHeaderDefinition {
785-
HeaderDefinition() { isResponse(this.getReceiver().asExpr()) }
785+
HeaderDefinition() { isResponse(this.getReceiver()) }
786786

787787
override RouteHandler getRouteHandler() { this.getReceiver() = result.getAResponseNode() }
788788
}

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -647,12 +647,12 @@ module TaintedPath {
647647
/**
648648
* A path argument to the Express `res.render` method.
649649
*/
650-
class ExpressRenderSink extends Sink, DataFlow::ValueNode {
650+
class ExpressRenderSink extends Sink {
651651
ExpressRenderSink() {
652-
exists(MethodCallExpr mce |
652+
exists(DataFlow::MethodCallNode mce |
653653
Express::isResponse(mce.getReceiver()) and
654654
mce.getMethodName() = "render" and
655-
astNode = mce.getArgument(0)
655+
this = mce.getArgument(0)
656656
)
657657
}
658658
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
import javascript
22

3-
query predicate test_isRequest(Expr nd) { Express::isRequest(nd) }
3+
query predicate test_isRequest(DataFlow::Node nd) { Express::isRequest(nd) }
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
import javascript
22

3-
query predicate test_isResponse(Expr nd) { Express::isResponse(nd) }
3+
query predicate test_isResponse(DataFlow::Node nd) { Express::isResponse(nd) }

0 commit comments

Comments
 (0)