@@ -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