Skip to content

Commit d7526c4

Browse files
committed
Python: Copy old flask tests to new dataflow setup
1 parent 339c072 commit d7526c4

File tree

3 files changed

+165
-98
lines changed

3 files changed

+165
-98
lines changed
Lines changed: 98 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -1,98 +1,98 @@
1-
| test.py:6 | fail | test_taint | name |
2-
| test.py:6 | fail | test_taint | number |
3-
| test.py:7 | ok | test_taint | foo |
4-
| test.py:14 | ok | test_taint | request.environ |
5-
| test.py:15 | ok | test_taint | request.environ.get(..) |
6-
| test.py:17 | ok | test_taint | request.path |
7-
| test.py:18 | ok | test_taint | request.full_path |
8-
| test.py:19 | ok | test_taint | request.base_url |
9-
| test.py:20 | ok | test_taint | request.url |
10-
| test.py:23 | fail | test_taint | request.accept_charsets.best |
11-
| test.py:24 | fail | test_taint | request.accept_charsets.best_match(..) |
12-
| test.py:25 | ok | test_taint | request.accept_charsets[0] |
13-
| test.py:26 | ok | test_taint | request.accept_encodings |
14-
| test.py:27 | ok | test_taint | request.accept_languages |
15-
| test.py:28 | ok | test_taint | request.accept_mimetypes |
16-
| test.py:31 | ok | test_taint | request.access_control_request_headers |
17-
| test.py:33 | ok | test_taint | request.access_control_request_method |
18-
| test.py:35 | ok | test_taint | request.access_route |
19-
| test.py:36 | ok | test_taint | request.access_route[0] |
20-
| test.py:39 | ok | test_taint | request.args |
21-
| test.py:40 | ok | test_taint | request.args['key'] |
22-
| test.py:41 | ok | test_taint | request.args.getlist(..) |
23-
| test.py:44 | ok | test_taint | request.authorization |
24-
| test.py:45 | ok | test_taint | request.authorization['username'] |
25-
| test.py:46 | fail | test_taint | request.authorization.username |
26-
| test.py:49 | ok | test_taint | request.cache_control |
27-
| test.py:51 | fail | test_taint | request.cache_control.max_age |
28-
| test.py:52 | fail | test_taint | request.cache_control.max_stale |
29-
| test.py:53 | fail | test_taint | request.cache_control.min_fresh |
30-
| test.py:55 | ok | test_taint | request.content_encoding |
31-
| test.py:57 | ok | test_taint | request.content_md5 |
32-
| test.py:59 | ok | test_taint | request.content_type |
33-
| test.py:62 | ok | test_taint | request.cookies |
34-
| test.py:63 | ok | test_taint | request.cookies['key'] |
35-
| test.py:65 | ok | test_taint | request.data |
36-
| test.py:68 | ok | test_taint | request.files |
37-
| test.py:69 | ok | test_taint | request.files['key'] |
38-
| test.py:70 | fail | test_taint | request.files['key'].filename |
39-
| test.py:71 | fail | test_taint | request.files['key'].stream |
40-
| test.py:72 | ok | test_taint | request.files.getlist(..) |
41-
| test.py:73 | fail | test_taint | request.files.getlist(..)[0].filename |
42-
| test.py:74 | fail | test_taint | request.files.getlist(..)[0].stream |
43-
| test.py:77 | ok | test_taint | request.form |
44-
| test.py:78 | ok | test_taint | request.form['key'] |
45-
| test.py:79 | ok | test_taint | request.form.getlist(..) |
46-
| test.py:81 | ok | test_taint | request.get_data() |
47-
| test.py:83 | ok | test_taint | request.get_json() |
48-
| test.py:84 | ok | test_taint | request.get_json()['foo'] |
49-
| test.py:85 | ok | test_taint | request.get_json()['foo']['bar'] |
50-
| test.py:89 | ok | test_taint | request.headers |
51-
| test.py:90 | ok | test_taint | request.headers['key'] |
52-
| test.py:91 | fail | test_taint | request.headers.get_all(..) |
53-
| test.py:92 | fail | test_taint | request.headers.getlist(..) |
54-
| test.py:93 | ok | test_taint | list(..) |
55-
| test.py:94 | fail | test_taint | request.headers.to_wsgi_list() |
56-
| test.py:96 | ok | test_taint | request.json |
57-
| test.py:97 | ok | test_taint | request.json['foo'] |
58-
| test.py:98 | ok | test_taint | request.json['foo']['bar'] |
59-
| test.py:100 | ok | test_taint | request.method |
60-
| test.py:102 | ok | test_taint | request.mimetype |
61-
| test.py:104 | ok | test_taint | request.mimetype_params |
62-
| test.py:106 | ok | test_taint | request.origin |
63-
| test.py:109 | ok | test_taint | request.pragma |
64-
| test.py:111 | ok | test_taint | request.query_string |
65-
| test.py:113 | ok | test_taint | request.referrer |
66-
| test.py:115 | ok | test_taint | request.remote_addr |
67-
| test.py:117 | ok | test_taint | request.remote_user |
68-
| test.py:120 | ok | test_taint | request.stream |
69-
| test.py:121 | ok | test_taint | request.input_stream |
70-
| test.py:123 | ok | test_taint | request.url |
71-
| test.py:125 | ok | test_taint | request.user_agent |
72-
| test.py:128 | ok | test_taint | request.values |
73-
| test.py:129 | ok | test_taint | request.values['key'] |
74-
| test.py:130 | ok | test_taint | request.values.getlist(..) |
75-
| test.py:133 | ok | test_taint | request.view_args |
76-
| test.py:134 | ok | test_taint | request.view_args['key'] |
77-
| test.py:138 | ok | test_taint | request.script_root |
78-
| test.py:139 | ok | test_taint | request.url_root |
79-
| test.py:143 | ok | test_taint | request.charset |
80-
| test.py:144 | ok | test_taint | request.url_charset |
81-
| test.py:148 | ok | test_taint | request.date |
82-
| test.py:151 | ok | test_taint | request.endpoint |
83-
| test.py:156 | ok | test_taint | request.host |
84-
| test.py:157 | ok | test_taint | request.host_url |
85-
| test.py:159 | ok | test_taint | request.scheme |
86-
| test.py:161 | ok | test_taint | request.script_root |
87-
| test.py:169 | ok | test_taint | request.args |
88-
| test.py:170 | ok | test_taint | a |
89-
| test.py:171 | ok | test_taint | b |
90-
| test.py:173 | ok | test_taint | request.args['key'] |
91-
| test.py:174 | ok | test_taint | a['key'] |
92-
| test.py:175 | ok | test_taint | b['key'] |
93-
| test.py:177 | ok | test_taint | request.args.getlist(..) |
94-
| test.py:178 | ok | test_taint | a.getlist(..) |
95-
| test.py:179 | ok | test_taint | b.getlist(..) |
96-
| test.py:180 | ok | test_taint | gl(..) |
97-
| test.py:187 | ok | test_taint | req.path |
98-
| test.py:188 | ok | test_taint | gd() |
1+
| taint_test.py:6 | fail | test_taint | name |
2+
| taint_test.py:6 | fail | test_taint | number |
3+
| taint_test.py:7 | ok | test_taint | foo |
4+
| taint_test.py:14 | ok | test_taint | request.environ |
5+
| taint_test.py:15 | ok | test_taint | request.environ.get(..) |
6+
| taint_test.py:17 | ok | test_taint | request.path |
7+
| taint_test.py:18 | ok | test_taint | request.full_path |
8+
| taint_test.py:19 | ok | test_taint | request.base_url |
9+
| taint_test.py:20 | ok | test_taint | request.url |
10+
| taint_test.py:23 | fail | test_taint | request.accept_charsets.best |
11+
| taint_test.py:24 | fail | test_taint | request.accept_charsets.best_match(..) |
12+
| taint_test.py:25 | ok | test_taint | request.accept_charsets[0] |
13+
| taint_test.py:26 | ok | test_taint | request.accept_encodings |
14+
| taint_test.py:27 | ok | test_taint | request.accept_languages |
15+
| taint_test.py:28 | ok | test_taint | request.accept_mimetypes |
16+
| taint_test.py:31 | ok | test_taint | request.access_control_request_headers |
17+
| taint_test.py:33 | ok | test_taint | request.access_control_request_method |
18+
| taint_test.py:35 | ok | test_taint | request.access_route |
19+
| taint_test.py:36 | ok | test_taint | request.access_route[0] |
20+
| taint_test.py:39 | ok | test_taint | request.args |
21+
| taint_test.py:40 | ok | test_taint | request.args['key'] |
22+
| taint_test.py:41 | ok | test_taint | request.args.getlist(..) |
23+
| taint_test.py:44 | ok | test_taint | request.authorization |
24+
| taint_test.py:45 | ok | test_taint | request.authorization['username'] |
25+
| taint_test.py:46 | fail | test_taint | request.authorization.username |
26+
| taint_test.py:49 | ok | test_taint | request.cache_control |
27+
| taint_test.py:51 | fail | test_taint | request.cache_control.max_age |
28+
| taint_test.py:52 | fail | test_taint | request.cache_control.max_stale |
29+
| taint_test.py:53 | fail | test_taint | request.cache_control.min_fresh |
30+
| taint_test.py:55 | ok | test_taint | request.content_encoding |
31+
| taint_test.py:57 | ok | test_taint | request.content_md5 |
32+
| taint_test.py:59 | ok | test_taint | request.content_type |
33+
| taint_test.py:62 | ok | test_taint | request.cookies |
34+
| taint_test.py:63 | ok | test_taint | request.cookies['key'] |
35+
| taint_test.py:65 | ok | test_taint | request.data |
36+
| taint_test.py:68 | ok | test_taint | request.files |
37+
| taint_test.py:69 | ok | test_taint | request.files['key'] |
38+
| taint_test.py:70 | fail | test_taint | request.files['key'].filename |
39+
| taint_test.py:71 | fail | test_taint | request.files['key'].stream |
40+
| taint_test.py:72 | ok | test_taint | request.files.getlist(..) |
41+
| taint_test.py:73 | fail | test_taint | request.files.getlist(..)[0].filename |
42+
| taint_test.py:74 | fail | test_taint | request.files.getlist(..)[0].stream |
43+
| taint_test.py:77 | ok | test_taint | request.form |
44+
| taint_test.py:78 | ok | test_taint | request.form['key'] |
45+
| taint_test.py:79 | ok | test_taint | request.form.getlist(..) |
46+
| taint_test.py:81 | ok | test_taint | request.get_data() |
47+
| taint_test.py:83 | ok | test_taint | request.get_json() |
48+
| taint_test.py:84 | ok | test_taint | request.get_json()['foo'] |
49+
| taint_test.py:85 | ok | test_taint | request.get_json()['foo']['bar'] |
50+
| taint_test.py:89 | ok | test_taint | request.headers |
51+
| taint_test.py:90 | ok | test_taint | request.headers['key'] |
52+
| taint_test.py:91 | fail | test_taint | request.headers.get_all(..) |
53+
| taint_test.py:92 | fail | test_taint | request.headers.getlist(..) |
54+
| taint_test.py:93 | ok | test_taint | list(..) |
55+
| taint_test.py:94 | fail | test_taint | request.headers.to_wsgi_list() |
56+
| taint_test.py:96 | ok | test_taint | request.json |
57+
| taint_test.py:97 | ok | test_taint | request.json['foo'] |
58+
| taint_test.py:98 | ok | test_taint | request.json['foo']['bar'] |
59+
| taint_test.py:100 | ok | test_taint | request.method |
60+
| taint_test.py:102 | ok | test_taint | request.mimetype |
61+
| taint_test.py:104 | ok | test_taint | request.mimetype_params |
62+
| taint_test.py:106 | ok | test_taint | request.origin |
63+
| taint_test.py:109 | ok | test_taint | request.pragma |
64+
| taint_test.py:111 | ok | test_taint | request.query_string |
65+
| taint_test.py:113 | ok | test_taint | request.referrer |
66+
| taint_test.py:115 | ok | test_taint | request.remote_addr |
67+
| taint_test.py:117 | ok | test_taint | request.remote_user |
68+
| taint_test.py:120 | ok | test_taint | request.stream |
69+
| taint_test.py:121 | ok | test_taint | request.input_stream |
70+
| taint_test.py:123 | ok | test_taint | request.url |
71+
| taint_test.py:125 | ok | test_taint | request.user_agent |
72+
| taint_test.py:128 | ok | test_taint | request.values |
73+
| taint_test.py:129 | ok | test_taint | request.values['key'] |
74+
| taint_test.py:130 | ok | test_taint | request.values.getlist(..) |
75+
| taint_test.py:133 | ok | test_taint | request.view_args |
76+
| taint_test.py:134 | ok | test_taint | request.view_args['key'] |
77+
| taint_test.py:138 | ok | test_taint | request.script_root |
78+
| taint_test.py:139 | ok | test_taint | request.url_root |
79+
| taint_test.py:143 | ok | test_taint | request.charset |
80+
| taint_test.py:144 | ok | test_taint | request.url_charset |
81+
| taint_test.py:148 | ok | test_taint | request.date |
82+
| taint_test.py:151 | ok | test_taint | request.endpoint |
83+
| taint_test.py:156 | ok | test_taint | request.host |
84+
| taint_test.py:157 | ok | test_taint | request.host_url |
85+
| taint_test.py:159 | ok | test_taint | request.scheme |
86+
| taint_test.py:161 | ok | test_taint | request.script_root |
87+
| taint_test.py:169 | ok | test_taint | request.args |
88+
| taint_test.py:170 | ok | test_taint | a |
89+
| taint_test.py:171 | ok | test_taint | b |
90+
| taint_test.py:173 | ok | test_taint | request.args['key'] |
91+
| taint_test.py:174 | ok | test_taint | a['key'] |
92+
| taint_test.py:175 | ok | test_taint | b['key'] |
93+
| taint_test.py:177 | ok | test_taint | request.args.getlist(..) |
94+
| taint_test.py:178 | ok | test_taint | a.getlist(..) |
95+
| taint_test.py:179 | ok | test_taint | b.getlist(..) |
96+
| taint_test.py:180 | ok | test_taint | gl(..) |
97+
| taint_test.py:187 | ok | test_taint | req.path |
98+
| taint_test.py:188 | ok | test_taint | gd() |
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
import flask
2+
3+
from flask import Flask, request, make_response
4+
app = Flask(__name__)
5+
6+
@app.route("/")
7+
def hello_world():
8+
return "Hello World!"
9+
10+
from flask.views import MethodView
11+
12+
class MyView(MethodView):
13+
14+
def get(self, user_id):
15+
if user_id is None:
16+
# return a list of users
17+
pass
18+
else:
19+
# expose a single user
20+
pass
21+
22+
the_view = MyView.as_view('my_view')
23+
24+
app.add_url_rule('/the/', defaults={'user_id': None},
25+
view_func=the_view, methods=['GET',])
26+
27+
@app.route("/dangerous")
28+
def dangerous():
29+
return request.args.get('payload')
30+
31+
@app.route("/dangerous-with-cfg-split")
32+
def dangerous2():
33+
x = request.form['param0']
34+
if request.method == "POST":
35+
return request.form['param1']
36+
return None
37+
38+
@app.route('/unsafe')
39+
def unsafe():
40+
first_name = request.args.get('name', '')
41+
return make_response("Your name is " + first_name)
42+
43+
@app.route('/safe')
44+
def safe():
45+
first_name = request.args.get('name', '')
46+
return make_response("Your name is " + escape(first_name))
47+
48+
@app.route('/hello/<name>')
49+
def hello(name):
50+
return make_response("Your name is " + name)
51+
52+
@app.route('/foo/<path:subpath>')
53+
def foo(subpath):
54+
return make_response("The subpath is " + subpath)
55+
56+
@app.route('/multiple/') # TODO: not recognized as route
57+
@app.route('/multiple/foo/<foo>') # TODO: not recognized as route
58+
@app.route('/multiple/bar/<bar>')
59+
def multiple(foo=None, bar=None):
60+
return make_response("foo={!r} bar={!r}".format(foo, bar))
61+
62+
@app.route('/complex/<string(length=2):lang_code>')
63+
def complex(lang_code):
64+
return make_response("lang_code {}".format(lang_code))
65+
66+
if __name__ == "__main__":
67+
app.run(debug=True)

python/ql/test/experimental/library-tests/frameworks/flask/test.py renamed to python/ql/test/experimental/library-tests/frameworks/flask/taint_test.py

File renamed without changes.

0 commit comments

Comments
 (0)