diff options
author | Suraj Tripathi <suraj.t97@gmail.com> | 2017-11-27 23:31:32 +0530 |
---|---|---|
committer | Thomas Kriechbaumer <Kriechi@users.noreply.github.com> | 2017-11-27 19:01:32 +0100 |
commit | 5067438ec178643ac6ffe9ce518f502bc680dc99 (patch) | |
tree | 2cded8c78920e6077d917913447d37722f55af61 | |
parent | 46901d1d55cb5bad86e17e093b85ade8111315aa (diff) | |
download | mitmproxy-5067438ec178643ac6ffe9ce518f502bc680dc99.tar.gz mitmproxy-5067438ec178643ac6ffe9ce518f502bc680dc99.tar.bz2 mitmproxy-5067438ec178643ac6ffe9ce518f502bc680dc99.zip |
Bug in expected_http_body_size fix (#2642)
fixes #2618
-rw-r--r-- | mitmproxy/net/http/http1/read.py | 6 | ||||
-rw-r--r-- | test/mitmproxy/net/http/http1/test_read.py | 11 |
2 files changed, 16 insertions, 1 deletions
diff --git a/mitmproxy/net/http/http1/read.py b/mitmproxy/net/http/http1/read.py index 491135ac..0f70b1a7 100644 --- a/mitmproxy/net/http/http1/read.py +++ b/mitmproxy/net/http/http1/read.py @@ -210,7 +210,11 @@ def expected_http_body_size(request, response=None): return None if "content-length" in headers: try: - size = int(headers["content-length"]) + sizes = headers.get_all("content-length") + different_content_length_headers = any(x != sizes[0] for x in sizes) + if different_content_length_headers: + raise exceptions.HttpSyntaxException("Conflicting Content Length Headers") + size = int(sizes[0]) if size < 0: raise ValueError() return size diff --git a/test/mitmproxy/net/http/http1/test_read.py b/test/mitmproxy/net/http/http1/test_read.py index b3589c92..4084c360 100644 --- a/test/mitmproxy/net/http/http1/test_read.py +++ b/test/mitmproxy/net/http/http1/test_read.py @@ -194,6 +194,17 @@ def test_expected_http_body_size(): treq(headers=Headers(content_length="42")) ) == 42 + # more than 1 content-length headers with same value + assert expected_http_body_size( + treq(headers=Headers([(b'content-length', b'42'), (b'content-length', b'42')])) + ) == 42 + + # more than 1 content-length headers with conflicting value + with pytest.raises(exceptions.HttpSyntaxException): + expected_http_body_size( + treq(headers=Headers([(b'content-length', b'42'), (b'content-length', b'45')])) + ) + # no length assert expected_http_body_size( treq(headers=Headers()) |