]> granicus.if.org Git - python/commitdiff
Issue #26560: Avoid potential ValueError in BaseHandler.start_response
authorBerker Peksag <berker.peksag@gmail.com>
Sat, 19 Mar 2016 07:04:59 +0000 (09:04 +0200)
committerBerker Peksag <berker.peksag@gmail.com>
Sat, 19 Mar 2016 07:04:59 +0000 (09:04 +0200)
Initial patch by Peter Inglesby.

Lib/test/test_wsgiref.py
Lib/wsgiref/handlers.py
Misc/NEWS

index 8cca595ab1ecaf5e44b6edc84014996a95bdd002..3f800eff2d66d0e9731330ba76ae634b56cd712c 100644 (file)
@@ -166,6 +166,27 @@ class IntegrationTests(TestCase):
             " be of type list: <class 'tuple'>"
         )
 
+    def test_status_validation_errors(self):
+        def create_bad_app(status):
+            def bad_app(environ, start_response):
+                start_response(status, [("Content-Type", "text/plain; charset=utf-8")])
+                return [b"Hello, world!"]
+            return bad_app
+
+        tests = [
+            ('200', 'AssertionError: Status must be at least 4 characters'),
+            ('20X OK', 'AssertionError: Status message must begin w/3-digit code'),
+            ('200OK', 'AssertionError: Status message must have a space after code'),
+        ]
+
+        for status, exc_message in tests:
+            with self.subTest(status=status):
+                out, err = run_amock(create_bad_app(status))
+                self.assertTrue(out.endswith(
+                    b"A server error occurred.  Please contact the administrator."
+                ))
+                self.assertEqual(err.splitlines()[-2], exc_message)
+
     def test_wsgi_input(self):
         def bad_app(e,s):
             e["wsgi.input"].read()
index 63d5993eca00f408382945f77e4fa243cf52b716..acb35479abe924e2d7406d7364a1a3f740990a46 100644 (file)
@@ -226,7 +226,7 @@ class BaseHandler:
         self.headers = self.headers_class(headers)
         status = self._convert_string_type(status, "Status")
         assert len(status)>=4,"Status must be at least 4 characters"
-        assert int(status[:3]),"Status message must begin w/3-digit code"
+        assert status[:3].isdigit(), "Status message must begin w/3-digit code"
         assert status[3]==" ", "Status message must have a space after code"
 
         if __debug__:
index 3eef15a42e0e9192e1e5fada397686b71e579366..bdcfebf856545390cd284de5d091220689be89d9 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -91,6 +91,9 @@ Core and Builtins
 Library
 -------
 
+- Issue #26560: Avoid potential ValueError in BaseHandler.start_response.
+  Initial patch by Peter Inglesby.
+
 - Issue #26313: ssl.py _load_windows_store_certs fails if windows cert store
   is empty. Patch by Baji.