From c1385c9a176b8d8113f05cb5e920392016bda0cd Mon Sep 17 00:00:00 2001 From: Benjamin Lee Date: Tue, 17 Nov 2015 04:51:20 +1100 Subject: Fix to ignore empty header value. According to Augmented BNF in the following RFCs http://tools.ietf.org/html/rfc5234#section-3.6 http://www.w3.org/Protocols/rfc2616/rfc2616-sec2.html#sec2.1 field-value = *( field-content | LWS ) http://tools.ietf.org/html/rfc7230#section-3.2 field-value = *( field-content / obs-fold ) ... the HTTP message header `field-value` is allowed to be empty. --- netlib/http/http1/read.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/netlib/http/http1/read.py b/netlib/http/http1/read.py index 0f6de26c..6e3a1b93 100644 --- a/netlib/http/http1/read.py +++ b/netlib/http/http1/read.py @@ -321,7 +321,7 @@ def _read_headers(rfile): try: name, value = line.split(b":", 1) value = value.strip() - if not name or not value: + if not name: raise ValueError() ret.append([name, value]) except ValueError: -- cgit v1.2.3 From cf1889e1575dbeb1257c37e97193fce1d2e65244 Mon Sep 17 00:00:00 2001 From: Benjamin Lee Date: Tue, 17 Nov 2015 06:46:48 +1100 Subject: WIP. Add breaking test. --- test/http/http1/test_read.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/test/http/http1/test_read.py b/test/http/http1/test_read.py index 45f61b4f..4524e1d0 100644 --- a/test/http/http1/test_read.py +++ b/test/http/http1/test_read.py @@ -297,6 +297,13 @@ class TestReadHeaders(object): with raises(HttpSyntaxException): self._read(data) + def test_read_empty_value(self): + data = b"bar:" + headers = self._read(data) + # XXX. WIP. break test + # assert headers.fields == [[b"bar", b""]] + with raises(HttpSyntaxException): + self._read(data) def test_read_chunked(): req = treq(content=None) -- cgit v1.2.3 From 52c02bc930b380f741b9bb295aa019e22687d5d3 Mon Sep 17 00:00:00 2001 From: Benjamin Lee Date: Tue, 17 Nov 2015 06:51:22 +1100 Subject: Add test for empty header field value. --- test/http/http1/test_read.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/test/http/http1/test_read.py b/test/http/http1/test_read.py index 4524e1d0..8a315508 100644 --- a/test/http/http1/test_read.py +++ b/test/http/http1/test_read.py @@ -300,10 +300,7 @@ class TestReadHeaders(object): def test_read_empty_value(self): data = b"bar:" headers = self._read(data) - # XXX. WIP. break test - # assert headers.fields == [[b"bar", b""]] - with raises(HttpSyntaxException): - self._read(data) + assert headers.fields == [[b"bar", b""]] def test_read_chunked(): req = treq(content=None) -- cgit v1.2.3