@@ -49,6 +49,21 @@ module Werkzeug {
49
49
DataFlow:: Node getlist ( ) {
50
50
result = any ( InstanceSourceApiNode a ) .getMember ( "getlist" ) .getAUse ( )
51
51
}
52
+
53
+ private class MultiDictAdditionalTaintStep extends TaintTracking:: AdditionalTaintStep {
54
+ override predicate step ( DataFlow:: Node nodeFrom , DataFlow:: Node nodeTo ) {
55
+ // obj -> obj.getlist
56
+ exists ( DataFlow:: AttrRead read |
57
+ read .getObject ( ) = nodeFrom and
58
+ nodeTo = read and
59
+ nodeTo = werkzeug:: datastructures:: MultiDict:: getlist ( )
60
+ )
61
+ or
62
+ // getlist -> getlist()
63
+ nodeFrom = werkzeug:: datastructures:: MultiDict:: getlist ( ) and
64
+ nodeTo .( DataFlow:: CallCfgNode ) .getFunction ( ) = nodeFrom
65
+ }
66
+ }
52
67
}
53
68
54
69
/**
@@ -73,41 +88,26 @@ module Werkzeug {
73
88
74
89
/** Gets a reference to an instance of `werkzeug.datastructures.FileStorage`. */
75
90
DataFlow:: Node instance ( ) { result = any ( InstanceSourceApiNode a ) .getAUse ( ) }
76
- }
77
- }
78
- }
79
91
80
- private class MultiDictAdditionalTaintStep extends TaintTracking:: AdditionalTaintStep {
81
- override predicate step ( DataFlow:: Node nodeFrom , DataFlow:: Node nodeTo ) {
82
- // obj -> obj.getlist
83
- exists ( DataFlow:: AttrRead read |
84
- read .getObject ( ) = nodeFrom and
85
- nodeTo = read and
86
- nodeTo = werkzeug:: datastructures:: MultiDict:: getlist ( )
87
- )
88
- or
89
- // getlist -> getlist()
90
- nodeFrom = werkzeug:: datastructures:: MultiDict:: getlist ( ) and
91
- nodeTo .( DataFlow:: CallCfgNode ) .getFunction ( ) = nodeFrom
92
- }
93
- }
94
-
95
- private class FileStorageAdditionalTaintStep extends TaintTracking:: AdditionalTaintStep {
96
- override predicate step ( DataFlow:: Node nodeFrom , DataFlow:: Node nodeTo ) {
97
- nodeFrom = werkzeug:: datastructures:: FileStorage:: instance ( ) and
98
- exists ( DataFlow:: AttrRead read | nodeTo = read |
99
- read .getAttributeName ( ) in [
100
- // str
101
- "filename" , "name" , "content_type" , "mimetype" ,
102
- // file-like
103
- "stream" ,
104
- // TODO: werkzeug.datastructures.Headers
105
- "headers" ,
106
- // dict[str, str]
107
- "mimetype_params"
108
- ] and
109
- read .getObject ( ) = nodeFrom
110
- )
92
+ private class FileStorageAdditionalTaintStep extends TaintTracking:: AdditionalTaintStep {
93
+ override predicate step ( DataFlow:: Node nodeFrom , DataFlow:: Node nodeTo ) {
94
+ nodeFrom = werkzeug:: datastructures:: FileStorage:: instance ( ) and
95
+ exists ( DataFlow:: AttrRead read | nodeTo = read |
96
+ read .getAttributeName ( ) in [
97
+ // str
98
+ "filename" , "name" , "content_type" , "mimetype" ,
99
+ // file-like
100
+ "stream" ,
101
+ // TODO: werkzeug.datastructures.Headers
102
+ "headers" ,
103
+ // dict[str, str]
104
+ "mimetype_params"
105
+ ] and
106
+ read .getObject ( ) = nodeFrom
107
+ )
108
+ }
109
+ }
110
+ }
111
111
}
112
112
}
113
113
}
0 commit comments