Skip to content

Commit 65c526d

Browse files
committed
Python: Model CookieWrite for tornado
1 parent 9340d65 commit 65c526d

File tree

2 files changed

+22
-4
lines changed

2 files changed

+22
-4
lines changed

python/ql/src/semmle/python/frameworks/Tornado.qll

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -422,7 +422,7 @@ private module Tornado {
422422
/**
423423
* A call to the `tornado.web.RequestHandler.redirect` method.
424424
*
425-
* See https://www.tornadoweb.org/en/stable/web.html?highlight=write#tornado.web.RequestHandler.redirect
425+
* See https://www.tornadoweb.org/en/stable/web.html#tornado.web.RequestHandler.redirect
426426
*/
427427
private class TornadoRequestHandlerRedirectCall extends HTTP::Server::HttpRedirectResponse::Range,
428428
DataFlow::CallCfgNode {
@@ -444,7 +444,7 @@ private module Tornado {
444444
/**
445445
* A call to the `tornado.web.RequestHandler.write` method.
446446
*
447-
* See https://www.tornadoweb.org/en/stable/web.html?highlight=write#tornado.web.RequestHandler.write
447+
* See https://www.tornadoweb.org/en/stable/web.html#tornado.web.RequestHandler.write
448448
*/
449449
private class TornadoRequestHandlerWriteCall extends HTTP::Server::HttpResponse::Range,
450450
DataFlow::CallCfgNode {
@@ -458,4 +458,22 @@ private module Tornado {
458458

459459
override DataFlow::Node getMimetypeOrContentTypeArg() { none() }
460460
}
461+
462+
/**
463+
* A call to the `tornado.web.RequestHandler.set_cookie` method.
464+
*
465+
* See https://www.tornadoweb.org/en/stable/web.html#tornado.web.RequestHandler.set_cookie
466+
*/
467+
class TornadoRequestHandlerSetCookieCall extends HTTP::Server::CookieWrite::Range,
468+
DataFlow::MethodCallNode {
469+
TornadoRequestHandlerSetCookieCall() {
470+
this.calls(tornado::web::RequestHandler::instance(), "set_cookie")
471+
}
472+
473+
override DataFlow::Node getHeaderArg() { none() }
474+
475+
override DataFlow::Node getNameArg() { result in [this.getArg(0), this.getArgByName("name")] }
476+
477+
override DataFlow::Node getValueArg() { result in [this.getArg(1), this.getArgByName("value")] }
478+
}
461479
}

python/ql/test/library-tests/frameworks/tornado/response_test.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,8 @@ def get(self, stream=False): # $ requestHandler routedParameter=stream
6565
class CookieWriting(tornado.web.RequestHandler):
6666
def get(self): # $ requestHandler
6767
self.write("foo") # $ HttpResponse mimetype=text/html responseBody="foo"
68-
self.set_cookie("key", "value") # $ MISSING: CookieWrite CookieName="key" CookieValue="value"
69-
self.set_cookie(name="key", value="value") # $ MISSING: CookieWrite CookieName="key" CookieValue="value"
68+
self.set_cookie("key", "value") # $ CookieWrite CookieName="key" CookieValue="value"
69+
self.set_cookie(name="key", value="value") # $ CookieWrite CookieName="key" CookieValue="value"
7070
self.set_header("Set-Cookie", "key2=value2") # $ MISSING: CookieWrite CookieRawHeader="key2=value2"
7171

7272

0 commit comments

Comments
 (0)