r47352 - Update after review.
adiroiban-TA+aISz0psMTMxyoc4vAAJOcrHinNvQL0E9HWUfgJXw@public.gmane.org Fri, 6 May 2016 02:25:14 -0600 (MDT)
| Newsgroups | gmane.comp.python.twisted.commits |
|---|---|
| Message-ID | <[email protected]> |
Author: adiroiban
Date: Fri May 6 02:25:09 2016
New Revision: 47352
Modified:
branches/http-client-invalid-header-8212/twisted/web/http.py
branches/http-client-invalid-header-8212/twisted/web/test/test_http.py
branches/http-client-invalid-header-8212/twisted/web/topfiles/8212.bugfix
Log:
Update after review.
Modified: branches/http-client-invalid-header-8212/twisted/web/http.py
==============================================================================
--- branches/http-client-invalid-header-8212/twisted/web/http.py (original)
+++ branches/http-client-invalid-header-8212/twisted/web/http.py Fri May 6 02:25:09 2016
@@ -423,6 +423,8 @@
Given a complete HTTP header, extract the field name and value and
process the header.
+ Invalid headers are ignored.
+
@param header: a complete HTTP request header of the form
'field-name: value'.
@type header: C{bytes}
@@ -430,6 +432,7 @@
try:
key, val = header.split(b':', 1)
except ValueError:
+ # Ignore invalid headers.
return
val = val.lstrip()
self.handleHeader(key, val)
Modified: branches/http-client-invalid-header-8212/twisted/web/test/test_http.py
==============================================================================
--- branches/http-client-invalid-header-8212/twisted/web/test/test_http.py (original)
+++ branches/http-client-invalid-header-8212/twisted/web/test/test_http.py Fri May 6 02:25:09 2016
@@ -2366,7 +2366,7 @@
self.assertEqual(c.length, 10)
- def test_extractIncorrectHeader(self):
+ def test_extractHeaderIncorrectNoException(self):
"""
An invalid header (e.g. header without colon) does not raise exception in
L{HTTPClient.extractHeader}.
@@ -2377,15 +2377,42 @@
c.lineReceived(b'HTTP/1.0 200')
c.lineReceived(b'X-Invalid-Header 0')
self.assertFalse(self.handleHeaderCalled)
-
# Signal end of headers.
c.lineReceived(b'')
+
self.assertFalse(self.handleHeaderCalled)
self.assertTrue(self.handleEndHeadersCalled)
self.assertEqual(c.version, b'HTTP/1.0')
self.assertEqual(c.status, b'200')
+ def test_extractHeaderIgnored(self):
+ """
+ An invalid header parsed by L{HTTPClient.extractHeader} is ignored
+ while previous or future headers are processed.
+ """
+ c = ClientDriver()
+ c.handleHeader = self.ourHandleHeader
+ c.handleEndHeaders = self.ourHandleEndHeaders
+ c.lineReceived(b'HTTP/1.1 200')
+ c.lineReceived(b'Pre-Header: pre-value')
+ c.lineReceived(b'X-Invalid-Header 0')
+ c.lineReceived(b'Post-Header: post-value')
+ self.assertFalse(self.handleHeaderCalled)
+ # Signal end of headers.
+ c.lineReceived(b'')
+
+ self.assertTrue(self.handleHeaderCalled)
+ self.assertTrue(self.handleEndHeadersCalled)
+ self.assertEqual(c.version, b'HTTP/1.1')
+ self.assertEqual(c.status, b'200')
+ self.assertEqual({
+ 'pre-header': 'pre-value',
+ 'post-header': 'post-value',
+ },
+ c.receivedHeaders)
+
+
def test_noHeaders(self):
"""
An HTTP request with no headers will not cause any calls to
Modified: branches/http-client-invalid-header-8212/twisted/web/topfiles/8212.bugfix
==============================================================================
--- branches/http-client-invalid-header-8212/twisted/web/topfiles/8212.bugfix (original)
+++ branches/http-client-invalid-header-8212/twisted/web/topfiles/8212.bugfix Fri May 6 02:25:09 2016
@@ -1 +1 @@
-twisted.web.http.HttpClient does not raise unhandled exceptions when receiving malformed headers from server
+twisted.web.http.HTTPClient now no longer raises an unhandled exception when parsing the malformed headers received from the server. Invalid headers are ignored.