Skip to content

Commit 46f4b74

Browse files
committed
Python: Fix tornado lib: a redirect is not a http response
1 parent ee382bb commit 46f4b74

File tree

6 files changed

+14
-19
lines changed

6 files changed

+14
-19
lines changed

python/ql/src/semmle/python/web/tornado/Redirect.qll

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,16 @@ import Tornado
1313
/**
1414
* Represents an argument to the `tornado.redirect` function.
1515
*/
16-
class TornadoRedirect extends HttpRedirectTaintSink {
17-
override string toString() { result = "tornado.redirect" }
16+
class TornadoHttpRequestHandlerRedirect extends HttpRedirectTaintSink {
17+
override string toString() { result = "tornado.HttpRequestHandler.redirect" }
1818

19-
TornadoRedirect() {
19+
TornadoHttpRequestHandlerRedirect() {
2020
exists(CallNode call, ControlFlowNode node |
2121
node = call.getFunction().(AttrNode).getObject("redirect") and
2222
isTornadoRequestHandlerInstance(node) and
23-
this = call.getAnArg()
23+
this = call.getArg(0)
2424
)
2525
}
26+
27+
override predicate sinks(TaintKind kind) { kind instanceof StringKind }
2628
}

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

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -45,17 +45,3 @@ class TornadoHttpRequestHandlerWrite extends HttpResponseTaintSink {
4545

4646
override predicate sinks(TaintKind kind) { kind instanceof StringKind }
4747
}
48-
49-
class TornadoHttpRequestHandlerRedirect extends HttpResponseTaintSink {
50-
override string toString() { result = "tornado.HttpRequestHandler.redirect" }
51-
52-
TornadoHttpRequestHandlerRedirect() {
53-
exists(CallNode call, ControlFlowNode node |
54-
node = call.getFunction().(AttrNode).getObject("redirect") and
55-
isTornadoRequestHandlerInstance(node) and
56-
this = call.getArg(0)
57-
)
58-
}
59-
60-
override predicate sinks(TaintKind kind) { kind instanceof StringKind }
61-
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
| test.py:20:23:20:25 | tornado.HttpRequestHandler.redirect | externally controlled string |
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import python
2+
import semmle.python.web.HttpRedirect
3+
import semmle.python.security.strings.Untrusted
4+
5+
from HttpRedirectTaintSink sink, TaintKind kind
6+
where sink.sinks(kind)
7+
select sink, kind

python/ql/test/library-tests/web/tornado/HttpSinks.expected renamed to python/ql/test/library-tests/web/tornado/HttpResponseSinks.expected

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
11
| test.py:6:20:6:43 | tornado.HttpRequestHandler.write | externally controlled string |
22
| test.py:12:20:12:23 | tornado.HttpRequestHandler.write | externally controlled string |
3-
| test.py:20:23:20:25 | tornado.HttpRequestHandler.redirect | externally controlled string |
43
| test.py:26:20:26:48 | tornado.HttpRequestHandler.write | externally controlled string |

python/ql/test/library-tests/web/tornado/HttpSinks.ql renamed to python/ql/test/library-tests/web/tornado/HttpResponseSinks.ql

File renamed without changes.

0 commit comments

Comments
 (0)