From: Ronak Gajrawala Date: Mon, 15 Jul 2024 16:47:18 +0000 (-0700) Subject: web: do not send 500 on invalid If-Modified-Since header (#3412) X-Git-Tag: v6.5.0b1~40 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=100d4db2ea3ef76d0ad400c890db9e2c94331296;p=thirdparty%2Ftornado.git web: do not send 500 on invalid If-Modified-Since header (#3412) https://github.com/tornadoweb/tornado/issues/3408 --- diff --git a/tornado/test/web_test.py b/tornado/test/web_test.py index 32a12bad..42c66171 100644 --- a/tornado/test/web_test.py +++ b/tornado/test/web_test.py @@ -1230,6 +1230,13 @@ class StaticFileTest(WebTestCase): ) self.assertEqual(response2.code, 200) + def test_static_304_if_modified_since_invalid(self): + response = self.get_and_head( + "/static/robots.txt", + headers={"If-Modified-Since": "!nv@l!d"}, + ) + self.assertEqual(response.code, 200) + def test_static_if_modified_since_pre_epoch(self): # On windows, the functions that work with time_t do not accept # negative values, and at least one client (processing.js) seems diff --git a/tornado/web.py b/tornado/web.py index 93ce3501..357c5f1a 100644 --- a/tornado/web.py +++ b/tornado/web.py @@ -2861,7 +2861,10 @@ class StaticFileHandler(RequestHandler): # content has not been modified ims_value = self.request.headers.get("If-Modified-Since") if ims_value is not None: - if_since = email.utils.parsedate_to_datetime(ims_value) + try: + if_since = email.utils.parsedate_to_datetime(ims_value) + except Exception: + return False if if_since.tzinfo is None: if_since = if_since.replace(tzinfo=datetime.timezone.utc) assert self.modified is not None