@@ -245,4 +245,60 @@ module Starlette {
245
245
246
246
override DataFlow:: Node getAPathArgument ( ) { result = this .getParameter ( 0 , "path" ) .asSink ( ) }
247
247
}
248
+
249
+ /**
250
+ * Provides models for the `starlette.requests.Request` class
251
+ *
252
+ * See https://www.starlette.io/requests/.
253
+ */
254
+ module Request {
255
+ /** Gets a reference to the `starlette.requests.Request` class. */
256
+ API:: Node classRef ( ) {
257
+ result = API:: moduleImport ( "starlette" ) .getMember ( "requests" ) .getMember ( "Request" )
258
+ or
259
+ result = API:: moduleImport ( "fastapi" ) .getMember ( "Request" )
260
+ }
261
+
262
+ /**
263
+ * A source of instances of `starlette.requests.Request`, extend this class to model new instances.
264
+ *
265
+ * This can include instantiations of the class, return values from function
266
+ * calls, or a special parameter that will be set when functions are called by an external
267
+ * library.
268
+ *
269
+ * Use the predicate `Request::instance()` to get references to instances of `starlette.requests.Request`.
270
+ */
271
+ abstract class InstanceSource extends DataFlow:: LocalSourceNode { }
272
+
273
+ /** A direct instantiation of `starlette.requests.Request`. */
274
+ private class ClassInstantiation extends InstanceSource {
275
+ ClassInstantiation ( ) { this = classRef ( ) .getAnInstance ( ) .asSource ( ) }
276
+ }
277
+
278
+ /** Gets a reference to an instance of `starlette.requests.Request`. */
279
+ private DataFlow:: TypeTrackingNode instance ( DataFlow:: TypeTracker t ) {
280
+ t .start ( ) and
281
+ result instanceof InstanceSource
282
+ or
283
+ exists ( DataFlow:: TypeTracker t2 | result = instance ( t2 ) .track ( t2 , t ) )
284
+ }
285
+
286
+ /** Gets a reference to an instance of `starlette.requests.Request`. */
287
+ DataFlow:: Node instance ( ) { instance ( DataFlow:: TypeTracker:: end ( ) ) .flowsTo ( result ) }
288
+
289
+ /**
290
+ * Taint propagation for `starlette.requests.Request`.
291
+ */
292
+ private class InstanceTaintSteps extends InstanceTaintStepsHelper {
293
+ InstanceTaintSteps ( ) { this = "starlette.requests.Request" }
294
+
295
+ override DataFlow:: Node getInstance ( ) { result = instance ( ) }
296
+
297
+ override string getAttributeName ( ) { result in [ "cookies" ] }
298
+
299
+ override string getMethodName ( ) { none ( ) }
300
+
301
+ override string getAsyncMethodName ( ) { result in [ "body" , "json" , "form" , "stream" ] }
302
+ }
303
+ }
248
304
}
0 commit comments