Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions cheroot/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -800,6 +800,13 @@ def read_request_line(self): # noqa: C901 # FIXME
)
return False

if b'\x00' in request_line:
self.simple_response(
'400 Bad Request',
'Malformed Request-Line',
)
return False

try:
method, uri, req_protocol = request_line.strip().split(SPACE, 2)
if not req_protocol.startswith(b'HTTP/'):
Expand Down
5 changes: 5 additions & 0 deletions cheroot/test/test_core.py
Original file line number Diff line number Diff line change
Expand Up @@ -314,6 +314,11 @@ def test_large_request(test_client_with_defaults):
HTTP_BAD_REQUEST,
b'Malformed Request-Line',
),
(
b'GET /\x00 HTTP/1.1', # NUL byte
HTTP_BAD_REQUEST,
b'Malformed Request-Line',
),
(
b'GET / HTTPS/1.1', # invalid proto
HTTP_BAD_REQUEST,
Expand Down
1 change: 1 addition & 0 deletions docs/changelog-fragments.d/832.bugfix.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Rejected HTTP request lines containing NUL bytes as malformed requests.
Loading