summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Merickel <michael@merickel.org>2022-04-26 23:17:39 -0500
committerGitHub <noreply@github.com>2022-04-26 23:17:39 -0500
commit7c3739b27f04f01fcabe6f20e328759cbe46ea5c (patch)
tree2c0fdaa8cca5f02c0de9a94021c26d8a2c54c793
parent3066fdd7d558bbd0023b7885900419483251a0f8 (diff)
parentdacaeee767dca6922e1bdfa3d4493a72ce85d7d6 (diff)
downloadwaitress-7c3739b27f04f01fcabe6f20e328759cbe46ea5c.tar.gz
Merge pull request #376 from Pylons/bugfix/header-calculation
Bugfix: header calculation
-rw-r--r--src/waitress/parser.py2
-rw-r--r--tests/test_parser.py12
2 files changed, 13 insertions, 1 deletions
diff --git a/src/waitress/parser.py b/src/waitress/parser.py
index ff16a40..b31b5cc 100644
--- a/src/waitress/parser.py
+++ b/src/waitress/parser.py
@@ -103,7 +103,7 @@ class HTTPRequestParser:
# If the headers have ended, and we also have part of the body
# message in data we still want to validate we aren't going
# over our limit for received headers.
- self.header_bytes_received += index
+ self.header_bytes_received = index
consumed = datalen - (len(s) - index)
else:
self.header_bytes_received += datalen
diff --git a/tests/test_parser.py b/tests/test_parser.py
index 4461bde..9e9f1cd 100644
--- a/tests/test_parser.py
+++ b/tests/test_parser.py
@@ -106,6 +106,18 @@ class TestHTTPRequestParser(unittest.TestCase):
self.assertTrue(self.parser.completed)
self.assertTrue(isinstance(self.parser.error, RequestEntityTooLarge))
+ def test_received_headers_not_too_large_multiple_chunks(self):
+
+ data = b"GET /foobar HTTP/8.4\r\nX-Foo: 1\r\n"
+ data2 = b"X-Foo-Other: 3\r\n\r\n"
+ self.parser.adj.max_request_header_size = len(data) + len(data2) + 1
+ result = self.parser.received(data)
+ self.assertEqual(result, 32)
+ result = self.parser.received(data2)
+ self.assertEqual(result, 18)
+ self.assertTrue(self.parser.completed)
+ self.assertFalse(self.parser.error)
+
def test_received_headers_too_large(self):
self.parser.adj.max_request_header_size = 2