1
1
/**
2
2
* Provides classes modeling security-relevant aspects of the `bottle` PyPI package.
3
- * See https://www.tornadoweb. org/en/stable /.
3
+ * See https://bottlepy. org/docs/dev /.
4
4
*/
5
5
6
6
private import python
@@ -14,28 +14,24 @@ private import semmle.python.frameworks.internal.InstanceTaintStepsHelper
14
14
* INTERNAL: Do not use.
15
15
*
16
16
* Provides models for the `bottle` PyPI package.
17
- * See https://www.tornadoweb. org/en/stable /.
17
+ * See https://bottlepy. org/docs/dev /.
18
18
*/
19
19
module Bottle {
20
20
module BottleModule {
21
21
API:: Node bottle ( ) { result = API:: moduleImport ( "bottle" ) }
22
22
23
23
module Response {
24
- API:: Node response ( ) {
25
- result = bottle ( ) .getMember ( "response" )
26
- //or
27
- //result = ModelOutput::getATypeNode("tornado.web.RequestHandler~Subclass").getASubclass*()
28
- }
24
+ API:: Node response ( ) { result = bottle ( ) .getMember ( "response" ) }
29
25
30
26
/**
31
- * A call to the `bottle.web.RequestHandler.set_header` method.
27
+ * A call to the `bottle.web.RequestHandler.set_header` or `bottle.web.RequestHandler.add_header` method.
32
28
*
33
- * See https://www.tornadoweb. org/en/stable/web .html#tornado.web.RequestHandler .set_header
29
+ * See https://bottlepy. org/docs/dev/api .html#bottle.BaseResponse .set_header
34
30
*/
35
- class BottleRequestHandlerSetHeaderCall extends Http:: Server:: ResponseHeaderWrite:: Range ,
31
+ class BottleResponseHandlerSetHeaderCall extends Http:: Server:: ResponseHeaderWrite:: Range ,
36
32
DataFlow:: MethodCallNode
37
33
{
38
- BottleRequestHandlerSetHeaderCall ( ) {
34
+ BottleResponseHandlerSetHeaderCall ( ) {
39
35
this = response ( ) .getMember ( [ "set_header" , "add_header" ] ) .getACall ( )
40
36
}
41
37
@@ -58,15 +54,13 @@ module Bottle {
58
54
private class Request extends RemoteFlowSource:: Range {
59
55
Request ( ) { this = request ( ) .asSource ( ) }
60
56
61
- //or
62
- //result = ModelOutput::getATypeNode("tornado.web.RequestHandler~Subclass").getASubclass*()
63
57
override string getSourceType ( ) { result = "bottle.request" }
64
58
}
65
59
66
60
/**
67
61
* Taint propagation for `bottle.request`.
68
62
*
69
- * See https://flask.palletsprojects.com/en/1.1.x /api/#flask.Request
63
+ * See https://bottlepy.org/docs/dev /api.html#bottle.request
70
64
*/
71
65
private class InstanceTaintSteps extends InstanceTaintStepsHelper {
72
66
InstanceTaintSteps ( ) { this = "bottle.request" }
@@ -86,11 +80,7 @@ module Bottle {
86
80
}
87
81
88
82
module Header {
89
- API:: Node instance ( ) {
90
- result = bottle ( ) .getMember ( "response" ) .getMember ( "headers" )
91
- //or
92
- //result = ModelOutput::getATypeNode("tornado.web.RequestHandler~Subclass").getASubclass*()
93
- }
83
+ API:: Node instance ( ) { result = bottle ( ) .getMember ( "response" ) .getMember ( "headers" ) }
94
84
95
85
/** A dict-like write to a response header. */
96
86
class HeaderWriteSubscript extends Http:: Server:: ResponseHeaderWrite:: Range , DataFlow:: Node {
@@ -105,12 +95,10 @@ module Bottle {
105
95
)
106
96
}
107
97
108
- //name = instance().getASubscript().getIndex().asSink()
109
98
override DataFlow:: Node getNameArg ( ) { result = name .asSink ( ) }
110
99
111
100
override DataFlow:: Node getValueArg ( ) { result = value .asSink ( ) }
112
101
113
- // TODO: These checks perhaps could be made more precise.
114
102
override predicate nameAllowsNewline ( ) { none ( ) }
115
103
116
104
override predicate valueAllowsNewline ( ) { none ( ) }
0 commit comments