summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRamiro Morales <cramm0@gmail.com>2010-11-30 21:32:11 +0000
committerRamiro Morales <cramm0@gmail.com>2010-11-30 21:32:11 +0000
commit612825583857f0dfbfa0c0bb3bb3c64832302f8d (patch)
tree2d4467240fd56395f3efe066a3805d15a83f77de
parent3d07bb71c6ffc225e6d3a32975f6855b2561e85a (diff)
[1.2.X] Fixed #14812 -- Made parsing of the If-Modified-Since HTTP header more robust in presence of malformed values when serving static content. Thanks shaohua for the report, and alexey.smolsky@gmail.com for a similar report and patch.
Backport of r14753 from trunk. git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.2.X@14754 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/views/static.py5
-rw-r--r--tests/regressiontests/views/tests/static.py14
2 files changed, 18 insertions, 1 deletions
diff --git a/django/views/static.py b/django/views/static.py
index cc88211876..fda3764b0c 100644
--- a/django/views/static.py
+++ b/django/views/static.py
@@ -129,7 +129,10 @@ def was_modified_since(header=None, mtime=0, size=0):
raise ValueError
matches = re.match(r"^([^;]+)(; length=([0-9]+))?$", header,
re.IGNORECASE)
- header_mtime = mktime_tz(parsedate_tz(matches.group(1)))
+ header_date = parsedate_tz(matches.group(1))
+ if header_date is None:
+ raise ValueError
+ header_mtime = mktime_tz(header_date)
header_len = matches.group(3)
if header_len and int(header_len) != size:
raise ValueError
diff --git a/tests/regressiontests/views/tests/static.py b/tests/regressiontests/views/tests/static.py
index 25153e86b0..de0bd51ac4 100644
--- a/tests/regressiontests/views/tests/static.py
+++ b/tests/regressiontests/views/tests/static.py
@@ -61,3 +61,17 @@ class StaticTests(TestCase):
self.assertEquals(len(response.content),
int(response['Content-Length']))
+ def test_invalid_if_modified_since2(self):
+ """Handle even more bogus If-Modified-Since values gracefully
+
+ Assume that a file is modified since an invalid timestamp as per RFC
+ 2616, section 14.25.
+ """
+ file_name = 'file.txt'
+ invalid_date = ': 1291108438, Wed, 20 Oct 2010 14:05:00 GMT'
+ response = self.client.get('/views/site_media/%s' % file_name,
+ HTTP_IF_MODIFIED_SINCE=invalid_date)
+ file = open(path.join(media_dir, file_name))
+ self.assertEquals(file.read(), response.content)
+ self.assertEquals(len(response.content),
+ int(response['Content-Length']))