Skip to content

Commit ac55e6a

Browse files
committed
Python: Modernise twisted library
1 parent 4e3c183 commit ac55e6a

5 files changed

Lines changed: 27 additions & 26 deletions

File tree

python/ql/src/semmle/python/web/twisted/Response.qll

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,12 @@ import Request
88

99
class TwistedResponse extends TaintSink {
1010
TwistedResponse() {
11-
exists(PyFunctionObject func, string name |
11+
exists(PythonFunctionValue func, string name, Return ret |
1212
isKnownRequestHandlerMethodName(name) and
1313
name = func.getName() and
1414
func = getTwistedRequestHandlerMethod(name) and
15-
this = func.getAReturnedNode()
15+
func.getScope() = ret.getScope() and
16+
ret.getValue().getAFlowNode() = this
1617
)
1718
}
1819

@@ -51,4 +52,4 @@ class TwistedResponse extends TaintSink {
5152
override string toString() {
5253
result = "Twisted request setter"
5354
}
54-
}
55+
}

python/ql/src/semmle/python/web/twisted/Twisted.qll

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,19 @@ import python
22

33
import semmle.python.security.TaintTracking
44

5-
private ClassObject theTwistedHttpRequestClass() {
6-
result = ModuleObject::named("twisted.web.http").attr("Request")
5+
private ClassValue theTwistedHttpRequestClass() {
6+
result = Value::named("twisted.web.http.Request")
77
}
88

9-
private ClassObject theTwistedHttpResourceClass() {
10-
result = ModuleObject::named("twisted.web.resource").attr("Resource")
9+
private ClassValue theTwistedHttpResourceClass() {
10+
result = Value::named("twisted.web.resource.Resource")
1111
}
1212

13-
ClassObject aTwistedRequestHandlerClass() {
14-
result.getASuperType() = theTwistedHttpResourceClass()
13+
ClassValue aTwistedRequestHandlerClass() {
14+
result.getABaseType+() = theTwistedHttpResourceClass()
1515
}
1616

17-
FunctionObject getTwistedRequestHandlerMethod(string name) {
17+
FunctionValue getTwistedRequestHandlerMethod(string name) {
1818
result = aTwistedRequestHandlerClass().declaredAttribute(name)
1919
}
2020

@@ -28,25 +28,25 @@ predicate isKnownRequestHandlerMethodName(string name) {
2828
* `Request` class.
2929
*/
3030
predicate isTwistedRequestInstance(NameNode node) {
31-
node.refersTo(_, theTwistedHttpRequestClass(), _)
31+
node.pointsTo().getClass() = theTwistedHttpRequestClass()
3232
or
3333
/* In points-to analysis cannot infer that a given object is an instance of
3434
* the `twisted.web.http.Request` class, we also include any parameter
3535
* called `request` that appears inside a subclass of a request handler
3636
* class, and the appropriate arguments of known request handler methods.
3737
*/
3838
exists(Function func | func = node.getScope() |
39-
func.getEnclosingScope().(Class).getClassObject() = aTwistedRequestHandlerClass()
39+
func.getEnclosingScope() = aTwistedRequestHandlerClass().getScope()
4040
) and
4141
(
4242
/* Any parameter called `request` */
4343
node.getId() = "request" and
4444
node.isParameter()
4545
or
4646
/* Any request parameter of a known request handler method */
47-
exists(FunctionObject func | node.getScope() = func.getFunction() |
47+
exists(Function func | node.getScope() = func |
4848
isKnownRequestHandlerMethodName(func.getName()) and
49-
node.getNode() = func.getFunction().getArg(1)
49+
node.getNode() = func.getArg(1)
5050
)
5151
)
5252
}

python/ql/test/library-tests/web/twisted/Classes.ql

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@ import python
22
import semmle.python.TestUtils
33
import semmle.python.web.twisted.Twisted
44

5-
from ClassObject cls
5+
from ClassValue cls
66
where cls = aTwistedRequestHandlerClass()
7-
select cls.toString(), remove_library_prefix(cls.getPyClass().getLocation())
7+
select cls.toString(), remove_library_prefix(cls.getScope().getLocation())
Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
| myrender | Function myrender | test.py:24 |
2-
| render | Function render | test.py:4 |
3-
| render | Function render | test.py:28 |
4-
| render | Function render | test.py:39 |
5-
| render | Function render | test.py:43 |
6-
| render_GET | Function render_GET | test.py:9 |
7-
| render_POST | Function render_POST | test.py:16 |
8-
| render_POST | Function render_POST | test.py:31 |
1+
| myrender | Function MyRequestHandler2.myrender | test.py:24 |
2+
| render | Function MyRequestHandler1.render | test.py:4 |
3+
| render | Function MyRequestHandler3.render | test.py:28 |
4+
| render | Function MyRequestHandler4.render | test.py:39 |
5+
| render | Function MyRequestHandler5.render | test.py:43 |
6+
| render_GET | Function MyRequestHandler1.render_GET | test.py:9 |
7+
| render_POST | Function MyRequestHandler1.render_POST | test.py:16 |
8+
| render_POST | Function MyRequestHandler3.render_POST | test.py:31 |

python/ql/test/library-tests/web/twisted/Methods.ql

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@ import python
22
import semmle.python.TestUtils
33
import semmle.python.web.twisted.Twisted
44

5-
from FunctionObject func, string name
5+
from FunctionValue func, string name
66
where func = getTwistedRequestHandlerMethod(name)
7-
select name, func.toString(), remove_library_prefix(func.getFunction().getLocation())
7+
select name, func.toString(), remove_library_prefix(func.getScope().getLocation())

0 commit comments

Comments
 (0)