r47351 - Apply 8212_web_http_final.diff.

adiroiban-TA+aISz0psMTMxyoc4vAAJOcrHinNvQL0E9HWUfgJXw@public.gmane.org Fri, 6 May 2016 01:31:45 -0600 (MDT)
Newsgroups gmane.comp.python.twisted.commits
Message-ID <[email protected]>
Author: adiroiban
Date: Fri May  6 01:31:38 2016
New Revision: 47351

Added:
   branches/http-client-invalid-header-8212/twisted/web/topfiles/8212.bugfix
Modified:
   branches/http-client-invalid-header-8212/twisted/web/http.py
   branches/http-client-invalid-header-8212/twisted/web/test/test_http.py

Log:
Apply 8212_web_http_final.diff.

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 01:31:38 2016
@@ -427,7 +427,10 @@
             'field-name: value'.
         @type header: C{bytes}
         """
-        key, val = header.split(b':', 1)
+        try:
+            key, val = header.split(b':', 1)
+        except ValueError:
+            return
         val = val.lstrip()
         self.handleHeader(key, val)
         if key.lower() == b'content-length':

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 01:31:38 2016
@@ -2366,6 +2366,26 @@
         self.assertEqual(c.length, 10)
 
 
+    def test_extractIncorrectHeader(self):
+        """
+        An invalid header (e.g. header without colon) does not raise exception in
+        L{HTTPClient.extractHeader}.
+        """
+        c = ClientDriver()
+        c.handleHeader = self.ourHandleHeader
+        c.handleEndHeaders = self.ourHandleEndHeaders
+        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_noHeaders(self):
         """
         An HTTP request with no headers will not cause any calls to