@@ -340,14 +340,18 @@ module Express {
340340 )
341341 }
342342
343+ /** An Express response source. */
344+ abstract private class ResponseSource extends HTTP:: Servers:: ResponseSource {
345+ }
346+
343347 /**
344348 * An Express response source, that is, the response parameter of a
345349 * route handler, or a chained method call on a response.
346350 */
347- private class ResponseSource extends HTTP :: Servers :: ResponseSource {
351+ private class ExplicitResponseSource extends ResponseSource {
348352 RouteHandler rh ;
349353
350- ResponseSource ( ) {
354+ ExplicitResponseSource ( ) {
351355 this = DataFlow:: parameterNode ( rh .getResponseParameter ( ) )
352356 or
353357 isChainableResponseMethodCall ( rh , this .asExpr ( ) )
@@ -359,21 +363,47 @@ module Express {
359363 override RouteHandler getRouteHandler ( ) { result = rh }
360364 }
361365
366+ /**
367+ * An Express response source, based on static type information.
368+ */
369+ private class TypedResponseSource extends ResponseSource {
370+ TypedResponseSource ( ) {
371+ hasUnderlyingType ( "express-serve-static-core" , "Response" ) // super type of 'express'.Response
372+ }
373+
374+ override RouteHandler getRouteHandler ( ) { none ( ) } // Not known.
375+ }
376+
377+ /** An Express request source. */
378+ abstract private class RequestSource extends HTTP:: Servers:: RequestSource {
379+ }
380+
362381 /**
363382 * An Express request source, that is, the request parameter of a
364383 * route handler.
365384 */
366- private class RequestSource extends HTTP :: Servers :: RequestSource {
385+ private class ExplicitRequestSource extends RequestSource {
367386 RouteHandler rh ;
368387
369- RequestSource ( ) { this = DataFlow:: parameterNode ( rh .getRequestParameter ( ) ) }
388+ ExplicitRequestSource ( ) { this = DataFlow:: parameterNode ( rh .getRequestParameter ( ) ) }
370389
371390 /**
372391 * Gets the route handler that handles this request.
373392 */
374393 override RouteHandler getRouteHandler ( ) { result = rh }
375394 }
376395
396+ /**
397+ * An Express request source, based on static type information.
398+ */
399+ private class TypedRequestSource extends RequestSource {
400+ TypedRequestSource ( ) {
401+ hasUnderlyingType ( "express-serve-static-core" , "Request" ) // super type of 'express'.Request
402+ }
403+
404+ override RouteHandler getRouteHandler ( ) { none ( ) } // Not known.
405+ }
406+
377407 /**
378408 * An Express response expression.
379409 */
0 commit comments