11import python
2-
32import semmle.python.security.TaintTracking
43
5- private ClassObject theTwistedHttpRequestClass ( ) {
6- result = ModuleObject :: named ( "twisted.web.http" ) . attr ( " Request")
4+ private ClassValue theTwistedHttpRequestClass ( ) {
5+ result = Value :: named ( "twisted.web.http. Request" )
76}
87
9- private ClassObject theTwistedHttpResourceClass ( ) {
10- result = ModuleObject :: named ( "twisted.web.resource" ) . attr ( " Resource")
8+ private ClassValue theTwistedHttpResourceClass ( ) {
9+ result = Value :: named ( "twisted.web.resource. Resource" )
1110}
1211
13- ClassObject aTwistedRequestHandlerClass ( ) {
14- result .getASuperType ( ) = theTwistedHttpResourceClass ( )
15- }
12+ ClassValue aTwistedRequestHandlerClass ( ) { result .getABaseType + ( ) = theTwistedHttpResourceClass ( ) }
1613
17- FunctionObject getTwistedRequestHandlerMethod ( string name ) {
14+ FunctionValue getTwistedRequestHandlerMethod ( string name ) {
1815 result = aTwistedRequestHandlerClass ( ) .declaredAttribute ( name )
1916}
2017
@@ -24,29 +21,30 @@ predicate isKnownRequestHandlerMethodName(string name) {
2421 name .matches ( "render_%" )
2522}
2623
27- /** Holds if `node` is likely to refer to an instance of the twisted
24+ /**
25+ * Holds if `node` is likely to refer to an instance of the twisted
2826 * `Request` class.
2927 */
3028predicate isTwistedRequestInstance ( NameNode node ) {
31- node .refersTo ( _ , theTwistedHttpRequestClass ( ) , _ )
29+ node .pointsTo ( ) . getClass ( ) = theTwistedHttpRequestClass ( )
3230 or
33- /* In points-to analysis cannot infer that a given object is an instance of
31+ /*
32+ * In points-to analysis cannot infer that a given object is an instance of
3433 * the `twisted.web.http.Request` class, we also include any parameter
3534 * called `request` that appears inside a subclass of a request handler
3635 * class, and the appropriate arguments of known request handler methods.
3736 */
38- exists ( Function func | func = node . getScope ( ) |
39- func . getEnclosingScope ( ) . ( Class ) . getClassObject ( ) = aTwistedRequestHandlerClass ( )
40- ) and
41- (
42- /* Any parameter called `request` */
43- node . getId ( ) = " request" and
44- node .isParameter ( )
45- or
46- /* Any request parameter of a known request handler method */
47- exists ( FunctionObject func | node . getScope ( ) = func . getFunction ( ) |
37+
38+ exists ( Function func |
39+ func = node . getScope ( ) and
40+ func . getEnclosingScope ( ) = aTwistedRequestHandlerClass ( ) . getScope ( )
41+ |
42+ /* Any parameter called ` request` */
43+ node .getId ( ) = "request" and
44+ node . isParameter ( )
45+ or
46+ /* Any request parameter of a known request handler method */
4847 isKnownRequestHandlerMethodName ( func .getName ( ) ) and
49- node .getNode ( ) = func .getFunction ( ) .getArg ( 1 )
50- )
48+ node .getNode ( ) = func .getArg ( 1 )
5149 )
5250}
0 commit comments