Skip to content

Commit 53f69d9

Browse files
Reduce query tests with cases covered by concept tests
1 parent 8fb2faa commit 53f69d9

File tree

7 files changed

+26
-319
lines changed

7 files changed

+26
-319
lines changed

python/ql/test/query-tests/Security/CWE-113-HeaderInjection/Tests1/HeaderInjection.expected

Lines changed: 19 additions & 115 deletions
Large diffs are not rendered by default.

python/ql/test/query-tests/Security/CWE-113-HeaderInjection/Tests1/HeaderWriteTest.expected

Lines changed: 0 additions & 82 deletions
This file was deleted.

python/ql/test/query-tests/Security/CWE-113-HeaderInjection/Tests1/HeaderWriteTest.ql

Lines changed: 0 additions & 20 deletions
This file was deleted.

python/ql/test/query-tests/Security/CWE-113-HeaderInjection/Tests1/flask_tests.py

Lines changed: 4 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -14,46 +14,6 @@ def werkzeug_headers():
1414
response.headers = headers
1515
return response
1616

17-
18-
@app.route("/flask_Response")
19-
def flask_Response():
20-
rfs_header = request.args["rfs_header"]
21-
response = Response()
22-
response.headers['HeaderName'] = rfs_header # GOOD
23-
response.headers[rfs_header] = "HeaderValue" # BAD
24-
return response
25-
26-
27-
@app.route("/flask_make_response")
28-
def flask_make_response():
29-
rfs_header = request.args["rfs_header"]
30-
response = make_response("hello")
31-
response.headers['HeaderName'] = rfs_header # GOOD
32-
response.headers[rfs_header] = "HeaderValue" # BAD
33-
return response
34-
35-
36-
@app.route("/flask_make_response_extend")
37-
def flask_make_response_extend():
38-
rfs_header = request.args["rfs_header"]
39-
resp = make_response("hello")
40-
resp.headers.extend(
41-
{'HeaderName': rfs_header}) # GOOD
42-
resp.headers.extend(
43-
{rfs_header: "HeaderValue"}) # BAD
44-
return resp
45-
46-
47-
@app.route("/Response_arg")
48-
def Response_arg():
49-
return Response(headers={'HeaderName': request.args["rfs_header"], request.args["rfs_header"]: "HeaderValue"}) # BAD
50-
51-
@app.route("/flask_make_response_header_arg3")
52-
def flask_make_response_header_arg3():
53-
rfs_header = request.args["rfs_header"]
54-
resp = make_response("hello", 200, {request.args["rfs_header"]: "HeaderValue"}) # BAD
55-
return resp
56-
5717
@app.route("/flask_make_response_header_arg2")
5818
def flask_make_response_header_arg2():
5919
rfs_header = request.args["rfs_header"]
@@ -66,26 +26,14 @@ def flask_escaped():
6626
resp = make_response("hello", {rfs_header.replace("\n", ""): "HeaderValue"}) # GOOD - Newlines are removed from the input.
6727
return resp
6828

69-
@app.route("/werkzeug_methods")
70-
def werkzeug_methods():
29+
@app.route("/flask_extend")
30+
def flask_extend():
7131
rfs_header = request.args["rfs_header"]
7232
response = Response()
73-
headers = Headers()
74-
headers.add(rfs_header, "HeaderValue") # BAD
75-
headers.add_header(rfs_header, "HeaderValue") # BAD
76-
headers.set(rfs_header, "HeaderValue") # BAD
77-
headers.setdefault(rfs_header, "HeaderValue") # BAD
78-
headers.__setitem__(rfs_header, "HeaderValue") # BAD
79-
headers[rfs_header] = "HeaderValue" # BAD
8033
h1 = {rfs_header: "HeaderValue"}
81-
headers.extend(h1) # BAD
34+
response.headers.extend(h1) # BAD
8235
h2 = [(rfs_header, "HeaderValue")]
83-
headers.extend(h2) # BAD
84-
response.headers = headers
85-
h3 = {rfs_header: "HeaderValue"}
86-
h4 = [(rfs_header, "HeaderValue")]
87-
resp2 = make_response("hi", h3) # BAD
88-
resp3 = make_response("hi", h4) # BAD
36+
response.headers.extend(h2) # BAD
8937
return response
9038

9139
# if __name__ == "__main__":

python/ql/test/query-tests/Security/CWE-113-HeaderInjection/Tests1/wsgiref_tests.py

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -9,24 +9,7 @@ def test_app(environ, start_response):
99
start_response(status, headers) # BAD
1010
return [b"Hello"]
1111

12-
def test_app2(environ, start_response):
13-
status = "200 OK"
14-
h_name = environ["source_n"]
15-
h_val = environ["source_v"]
16-
headers = Headers([(h_name, "val"), ("name", h_val)]) # BAD
17-
headers.add_header(h_name, h_val) # BAD
18-
headers.setdefault(h_name, h_val) # BAD
19-
headers.__setitem__(h_name, h_val) # BAD
20-
headers[h_name] = h_val # BAD
21-
start_response(status, headers)
22-
return [b"Hello"]
23-
2412
def main1():
2513
with make_server('', 8000, test_app) as httpd:
26-
print("Serving on port 8000...")
27-
httpd.serve_forever()
28-
29-
def main2():
30-
with make_server('', 8000, test_app2) as httpd:
3114
print("Serving on port 8000...")
3215
httpd.serve_forever()
Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,8 @@
11
source
22
| wsgiref_tests.py:5:14:5:20 | ControlFlowNode for environ |
3-
| wsgiref_tests.py:13:15:13:21 | ControlFlowNode for environ |
43
sink
54
headerWrite
6-
| wsgiref_tests.py:10:5:10:35 | ControlFlowNode for start_response() | wsgiref_tests.py:9:17:9:22 | ControlFlowNode for h_name | wsgiref_tests.py:9:25:9:29 | ControlFlowNode for Str | false | false |
5+
| wsgiref_tests.py:10:5:10:35 | ControlFlowNode for start_response() | wsgiref_tests.py:9:17:9:22 | ControlFlowNode for h_name | wsgiref_tests.py:9:25:9:29 | ControlFlowNode for StringLiteral | false | false |
76
| wsgiref_tests.py:10:5:10:35 | ControlFlowNode for start_response() | wsgiref_tests.py:9:17:9:22 | ControlFlowNode for h_name | wsgiref_tests.py:9:42:9:46 | ControlFlowNode for h_val | false | false |
8-
| wsgiref_tests.py:10:5:10:35 | ControlFlowNode for start_response() | wsgiref_tests.py:9:34:9:39 | ControlFlowNode for Str | wsgiref_tests.py:9:25:9:29 | ControlFlowNode for Str | false | false |
9-
| wsgiref_tests.py:10:5:10:35 | ControlFlowNode for start_response() | wsgiref_tests.py:9:34:9:39 | ControlFlowNode for Str | wsgiref_tests.py:9:42:9:46 | ControlFlowNode for h_val | false | false |
10-
| wsgiref_tests.py:17:15:17:57 | ControlFlowNode for Headers() | wsgiref_tests.py:17:25:17:30 | ControlFlowNode for h_name | wsgiref_tests.py:17:33:17:37 | ControlFlowNode for Str | false | false |
11-
| wsgiref_tests.py:17:15:17:57 | ControlFlowNode for Headers() | wsgiref_tests.py:17:25:17:30 | ControlFlowNode for h_name | wsgiref_tests.py:17:50:17:54 | ControlFlowNode for h_val | false | false |
12-
| wsgiref_tests.py:17:15:17:57 | ControlFlowNode for Headers() | wsgiref_tests.py:17:42:17:47 | ControlFlowNode for Str | wsgiref_tests.py:17:33:17:37 | ControlFlowNode for Str | false | false |
13-
| wsgiref_tests.py:17:15:17:57 | ControlFlowNode for Headers() | wsgiref_tests.py:17:42:17:47 | ControlFlowNode for Str | wsgiref_tests.py:17:50:17:54 | ControlFlowNode for h_val | false | false |
14-
| wsgiref_tests.py:18:5:18:37 | ControlFlowNode for Attribute() | wsgiref_tests.py:18:24:18:29 | ControlFlowNode for h_name | wsgiref_tests.py:18:32:18:36 | ControlFlowNode for h_val | false | false |
15-
| wsgiref_tests.py:19:5:19:37 | ControlFlowNode for Attribute() | wsgiref_tests.py:19:24:19:29 | ControlFlowNode for h_name | wsgiref_tests.py:19:32:19:36 | ControlFlowNode for h_val | false | false |
16-
| wsgiref_tests.py:20:5:20:38 | ControlFlowNode for Attribute() | wsgiref_tests.py:20:25:20:30 | ControlFlowNode for h_name | wsgiref_tests.py:20:33:20:37 | ControlFlowNode for h_val | false | false |
17-
| wsgiref_tests.py:21:5:21:19 | ControlFlowNode for Subscript | wsgiref_tests.py:21:13:21:18 | ControlFlowNode for h_name | wsgiref_tests.py:21:23:21:27 | ControlFlowNode for h_val | false | false |
7+
| wsgiref_tests.py:10:5:10:35 | ControlFlowNode for start_response() | wsgiref_tests.py:9:34:9:39 | ControlFlowNode for StringLiteral | wsgiref_tests.py:9:25:9:29 | ControlFlowNode for StringLiteral | false | false |
8+
| wsgiref_tests.py:10:5:10:35 | ControlFlowNode for start_response() | wsgiref_tests.py:9:34:9:39 | ControlFlowNode for StringLiteral | wsgiref_tests.py:9:42:9:46 | ControlFlowNode for h_val | false | false |

python/ql/test/query-tests/Security/CWE-113-HeaderInjection/Tests2/wsgiref_tests.py

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -10,24 +10,7 @@ def test_app(environ, start_response):
1010
start_response(status, headers) # GOOD - the application is validated, so headers containing newlines will be rejected.
1111
return [b"Hello"]
1212

13-
def test_app2(environ, start_response):
14-
status = "200 OK"
15-
h_name = environ["source_n"]
16-
h_val = environ["source_v"]
17-
headers = Headers([(h_name, "val"), ("name", h_val)]) # GOOD
18-
headers.add_header(h_name, h_val) # GOOD
19-
headers.setdefault(h_name, h_val) # GOOD
20-
headers.__setitem__(h_name, h_val) # GOOD
21-
headers[h_name] = h_val # GOOD
22-
start_response(status, headers)
23-
return [b"Hello"]
24-
2513
def main1():
2614
with make_server('', 8000, validator(test_app)) as httpd:
27-
print("Serving on port 8000...")
28-
httpd.serve_forever()
29-
30-
def main2():
31-
with make_server('', 8000, validator(test_app2)) as httpd:
3215
print("Serving on port 8000...")
3316
httpd.serve_forever()

0 commit comments

Comments
 (0)