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.