From: Andrey Sumin Date: Fri, 24 Mar 2017 14:03:27 +0000 (+0300) Subject: do not raise exceptions on unknown status codes X-Git-Tag: v5.0.0~92^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F1979%2Fhead;p=thirdparty%2Ftornado.git do not raise exceptions on unknown status codes --- diff --git a/tornado/test/web_test.py b/tornado/test/web_test.py index ff722c653..60f0be705 100644 --- a/tornado/test/web_test.py +++ b/tornado/test/web_test.py @@ -917,6 +917,10 @@ class ErrorResponseTest(WebTestCase): self.assertEqual(response.code, 503) self.assertTrue(b"503: Service Unavailable" in response.body) + response = self.fetch("/default?status=435") + self.assertEqual(response.code, 435) + self.assertTrue(b"435: Unknown" in response.body) + def test_write_error(self): with ExpectLog(app_log, "Uncaught exception"): response = self.fetch("/write_error") @@ -1489,9 +1493,9 @@ class StatusReasonTest(SimpleHandlerTestCase): response = self.fetch("/?code=682&reason=Bar") self.assertEqual(response.code, 682) self.assertEqual(response.reason, "Bar") - with ExpectLog(app_log, 'Uncaught exception'): - response = self.fetch("/?code=682") - self.assertEqual(response.code, 500) + response = self.fetch("/?code=682") + self.assertEqual(response.code, 682) + self.assertEqual(response.reason, "Unknown") @wsgi_safe diff --git a/tornado/web.py b/tornado/web.py index 4e932b6e7..4821119ab 100644 --- a/tornado/web.py +++ b/tornado/web.py @@ -319,10 +319,7 @@ class RequestHandler(object): if reason is not None: self._reason = escape.native_str(reason) else: - try: - self._reason = httputil.responses[status_code] - except KeyError: - raise ValueError("unknown status code %d" % status_code) + self._reason = httputil.responses.get(status_code, "Unknown") def get_status(self): """Returns the status code for our response.""" @@ -1558,11 +1555,7 @@ class RequestHandler(object): # send a response. return if isinstance(e, HTTPError): - if e.status_code not in httputil.responses and not e.reason: - gen_log.error("Bad HTTP status code: %d", e.status_code) - self.send_error(500, exc_info=sys.exc_info()) - else: - self.send_error(e.status_code, exc_info=sys.exc_info()) + self.send_error(e.status_code, exc_info=sys.exc_info()) else: self.send_error(500, exc_info=sys.exc_info())