diff --git a/gunicorn/http/body.py b/gunicorn/http/body.py index 78f03214a..3de84c7ca 100644 --- a/gunicorn/http/body.py +++ b/gunicorn/http/body.py @@ -91,6 +91,8 @@ def parse_chunk_size(self, unreader, data=None): chunk_size = chunk_size.rstrip(b" \t") if any(n not in b"0123456789abcdefABCDEF" for n in chunk_size): raise InvalidChunkSize(chunk_size) + if len(chunk_size) == 0: + raise InvalidChunkSize(chunk_size) chunk_size = int(chunk_size, 16) if chunk_size == 0: diff --git a/tests/requests/invalid/chunked_12.http b/tests/requests/invalid/chunked_12.http new file mode 100644 index 000000000..7ef164eb3 --- /dev/null +++ b/tests/requests/invalid/chunked_12.http @@ -0,0 +1,7 @@ +POST /chunked_no_chunk_size_but_ext HTTP/1.1\r\n +Transfer-Encoding: chunked\r\n +\r\n + ;foo=bar\r\n +hello\r\n +0\r\n +\r\n diff --git a/tests/requests/invalid/chunked_12.py b/tests/requests/invalid/chunked_12.py new file mode 100644 index 000000000..0571e1183 --- /dev/null +++ b/tests/requests/invalid/chunked_12.py @@ -0,0 +1,2 @@ +from gunicorn.http.errors import InvalidChunkSize +request = InvalidChunkSize diff --git a/tests/requests/invalid/chunked_13.http b/tests/requests/invalid/chunked_13.http new file mode 100644 index 000000000..6c26ebb85 --- /dev/null +++ b/tests/requests/invalid/chunked_13.http @@ -0,0 +1,7 @@ +POST /chunked_no_chunk_size HTTP/1.1\r\n +Transfer-Encoding: chunked\r\n +\r\n +\r\n +hello\r\n +0\r\n +\r\n diff --git a/tests/requests/invalid/chunked_13.py b/tests/requests/invalid/chunked_13.py new file mode 100644 index 000000000..0571e1183 --- /dev/null +++ b/tests/requests/invalid/chunked_13.py @@ -0,0 +1,2 @@ +from gunicorn.http.errors import InvalidChunkSize +request = InvalidChunkSize