Skip to content

Commit 70331c0

Browse files
committed
JS: Decouple chaining from ExplicitResponseSource
1 parent 96e415a commit 70331c0

File tree

1 file changed

+17
-20
lines changed
  • javascript/ql/lib/semmle/javascript/frameworks

1 file changed

+17
-20
lines changed

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

Lines changed: 17 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -513,21 +513,6 @@ module Express {
513513
}
514514
}
515515

516-
/**
517-
* Holds if `call` is a chainable method call on the response object of `handler`.
518-
*/
519-
private predicate isChainableResponseMethodCall(
520-
RouteHandler handler, DataFlow::MethodCallNode call
521-
) {
522-
exists(string name | call.calls(handler.getAResponseNode(), name) |
523-
name =
524-
[
525-
"append", "attachment", "location", "send", "sendStatus", "set", "status", "type", "vary",
526-
"clearCookie", "contentType", "cookie", "format", "header", "json", "jsonp", "links"
527-
]
528-
)
529-
}
530-
531516
/** An Express response source. */
532517
abstract class ResponseSource extends Http::Servers::ResponseSource { }
533518

@@ -538,11 +523,7 @@ module Express {
538523
private class ExplicitResponseSource extends ResponseSource {
539524
RouteHandler rh;
540525

541-
ExplicitResponseSource() {
542-
this = rh.getResponseParameter()
543-
or
544-
isChainableResponseMethodCall(rh, this)
545-
}
526+
ExplicitResponseSource() { this = rh.getResponseParameter() }
546527

547528
/**
548529
* Gets the route handler that provides this response.
@@ -559,6 +540,22 @@ module Express {
559540
override RouteHandler getRouteHandler() { none() } // Not known.
560541
}
561542

543+
private class ChainedResponse extends ResponseSource {
544+
private ResponseSource base;
545+
546+
ChainedResponse() {
547+
this =
548+
base.ref()
549+
.getAMethodCall([
550+
"append", "attachment", "location", "send", "sendStatus", "set", "status", "type",
551+
"vary", "clearCookie", "contentType", "cookie", "format", "header", "json", "jsonp",
552+
"links"
553+
])
554+
}
555+
556+
override Http::RouteHandler getRouteHandler() { result = base.getRouteHandler() }
557+
}
558+
562559
/** An Express request source. */
563560
abstract class RequestSource extends Http::Servers::RequestSource { }
564561

0 commit comments

Comments
 (0)