@@ -204,6 +204,24 @@ module HTTP {
204204 */
205205 abstract HeaderDefinition getAResponseHeader ( string name ) ;
206206
207+ /**
208+ * Gets a request object originating from this route handler.
209+ *
210+ * Use `RequestSource.ref()` to get reference to this request object.
211+ */
212+ final Servers:: RequestSource getARequestSource ( ) {
213+ result .getRouteHandler ( ) = this
214+ }
215+
216+ /**
217+ * Gets a request object originating from this route handler.
218+ *
219+ * Use `RequestSource.ref()` to get reference to this request object.
220+ */
221+ final Servers:: ResponseSource getAResponseSource ( ) {
222+ result .getRouteHandler ( ) = this
223+ }
224+
207225 /**
208226 * Gets an expression that contains a request object handled
209227 * by this handler.
@@ -296,14 +314,21 @@ module HTTP {
296314 */
297315 abstract RouteHandler getRouteHandler ( ) ;
298316
299- predicate flowsTo ( DataFlow:: Node nd ) { ref ( DataFlow:: TypeTracker:: end ( ) ) .flowsTo ( nd ) }
317+ /** DEPRECATED. Use `ref().flowsTo()` instead. */
318+ deprecated
319+ predicate flowsTo ( DataFlow:: Node nd ) { ref ( ) .flowsTo ( nd ) }
300320
301321 private DataFlow:: SourceNode ref ( DataFlow:: TypeTracker t ) {
302322 t .start ( ) and
303323 result = this
304324 or
305325 exists ( DataFlow:: TypeTracker t2 | result = ref ( t2 ) .track ( t2 , t ) )
306326 }
327+
328+ /** Gets a `SourceNode` that refers to this request object. */
329+ DataFlow:: SourceNode ref ( ) {
330+ result = ref ( DataFlow:: TypeTracker:: end ( ) )
331+ }
307332 }
308333
309334 /**
@@ -317,14 +342,20 @@ module HTTP {
317342 */
318343 abstract RouteHandler getRouteHandler ( ) ;
319344
320- predicate flowsTo ( DataFlow:: Node nd ) { ref ( DataFlow:: TypeTracker:: end ( ) ) .flowsTo ( nd ) }
345+ /** DEPRECATED. Use `ref().flowsTo()` instead. */
346+ predicate flowsTo ( DataFlow:: Node nd ) { ref ( ) .flowsTo ( nd ) }
321347
322348 private DataFlow:: SourceNode ref ( DataFlow:: TypeTracker t ) {
323349 t .start ( ) and
324350 result = this
325351 or
326352 exists ( DataFlow:: TypeTracker t2 | result = ref ( t2 ) .track ( t2 , t ) )
327353 }
354+
355+ /** Gets a `SourceNode` that refers to this response object. */
356+ DataFlow:: SourceNode ref ( ) {
357+ result = ref ( DataFlow:: TypeTracker:: end ( ) )
358+ }
328359 }
329360
330361 /**
@@ -333,7 +364,7 @@ module HTTP {
333364 class StandardRequestExpr extends RequestExpr {
334365 RequestSource src ;
335366
336- StandardRequestExpr ( ) { src .flowsTo ( DataFlow:: valueNode ( this ) ) }
367+ StandardRequestExpr ( ) { src .ref ( ) . flowsTo ( DataFlow:: valueNode ( this ) ) }
337368
338369 override RouteHandler getRouteHandler ( ) { result = src .getRouteHandler ( ) }
339370 }
@@ -344,7 +375,7 @@ module HTTP {
344375 class StandardResponseExpr extends ResponseExpr {
345376 ResponseSource src ;
346377
347- StandardResponseExpr ( ) { src .flowsTo ( DataFlow:: valueNode ( this ) ) }
378+ StandardResponseExpr ( ) { src .ref ( ) . flowsTo ( DataFlow:: valueNode ( this ) ) }
348379
349380 override RouteHandler getRouteHandler ( ) { result = src .getRouteHandler ( ) }
350381 }
0 commit comments