Commit 4d966ee2 authored by Jannis Leidel's avatar Jannis Leidel
Browse files

Fixed #12544 and #13600 -- Fixed static files serving view to catch invalid...

Fixed #12544 and #13600 -- Fixed static files serving view to catch invalid date from If-Modified-Since header. Thanks akaihola and SmileyChris for patches.

Backport from trunk (r13870).

git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.2.X@13871 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent c37add7c
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -135,6 +135,6 @@ def was_modified_since(header=None, mtime=0, size=0):
            raise ValueError
        if mtime > header_mtime:
            raise ValueError
    except (AttributeError, ValueError):
    except (AttributeError, ValueError, OverflowError):
        return True
    return False
+34 −0
Original line number Diff line number Diff line
@@ -2,6 +2,7 @@ import mimetypes
from os import path

from django.test import TestCase
from django.http import HttpResponseNotModified
from regressiontests.views.urls import media_dir

class StaticTests(TestCase):
@@ -27,3 +28,36 @@ class StaticTests(TestCase):
        file = open(path.join(media_dir, file_name))
        self.assertEquals(file.read(), response.content)

    def test_is_modified_since(self):
        file_name = 'file.txt'
        response = self.client.get(
            '/views/site_media/%s' % file_name,
            HTTP_IF_MODIFIED_SINCE='Thu, 1 Jan 1970 00:00:00 GMT')
        file = open(path.join(media_dir, file_name))
        self.assertEquals(file.read(), response.content)

    def test_not_modified_since(self):
        file_name = 'file.txt'
        response = self.client.get(
            '/views/site_media/%s' % file_name,
            HTTP_IF_MODIFIED_SINCE='Mon, 18 Jan 2038 05:14:07 UTC'
            # This is 24h before max Unix time. Remember to fix Django and
            # update this test well before 2038 :)
            )
        self.assertTrue(isinstance(response, HttpResponseNotModified))

    def test_invalid_if_modified_since(self):
        """Handle 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 = 'Mon, 28 May 999999999999 28:25:26 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']))