diff options
author | Berker Peksag <berker.peksag@gmail.com> | 2016-03-19 09:05:59 +0200 |
---|---|---|
committer | Berker Peksag <berker.peksag@gmail.com> | 2016-03-19 09:05:59 +0200 |
commit | cf934a1c9b9fbafbef0bbeb3288f4431bbc5652f (patch) | |
tree | e38eb673609f0ab2198a584021c2aca12af98abb | |
parent | bfab932971593b6468024e5774653bb2f5047b56 (diff) | |
parent | 1cd4ff6284071140826c8cfbb4771e4e395b774a (diff) | |
download | cpython-git-cf934a1c9b9fbafbef0bbeb3288f4431bbc5652f.tar.gz |
Issue #26560: Avoid potential ValueError in BaseHandler.start_response
Initial patch by Peter Inglesby.
-rw-r--r-- | Lib/test/test_wsgiref.py | 21 | ||||
-rw-r--r-- | Lib/wsgiref/handlers.py | 2 | ||||
-rw-r--r-- | Misc/NEWS | 3 |
3 files changed, 25 insertions, 1 deletions
diff --git a/Lib/test/test_wsgiref.py b/Lib/test/test_wsgiref.py index 8cca595ab1..3f800eff2d 100644 --- a/Lib/test/test_wsgiref.py +++ b/Lib/test/test_wsgiref.py @@ -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() diff --git a/Lib/wsgiref/handlers.py b/Lib/wsgiref/handlers.py index 63d5993eca..acb35479ab 100644 --- a/Lib/wsgiref/handlers.py +++ b/Lib/wsgiref/handlers.py @@ -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__: @@ -226,6 +226,9 @@ Core and Builtins Library ------- +- Issue #26560: Avoid potential ValueError in BaseHandler.start_response. + Initial patch by Peter Inglesby. + - Issue #26567: Add a new function :c:func:`PyErr_ResourceWarning` function to pass the destroyed object. Add a *source* attribute to :class:`warnings.WarningMessage`. Add warnings._showwarnmsg() which uses |