Fixed #18487 -- Made sure that protocol-relative URLs aren't processed by the cached staticfiles storage. Thanks to LukaszBalcerzak for the patch.
This commit is contained in:
parent
3047981517
commit
1aa0d8ac4d
|
@ -161,7 +161,7 @@ class CachedFilesMixin(object):
|
||||||
matched, url = matchobj.groups()
|
matched, url = matchobj.groups()
|
||||||
# Completely ignore http(s) prefixed URLs,
|
# Completely ignore http(s) prefixed URLs,
|
||||||
# fragments and data-uri URLs
|
# fragments and data-uri URLs
|
||||||
if url.startswith(('#', 'http:', 'https:', 'data:')):
|
if url.startswith(('#', 'http:', 'https:', 'data:', '//')):
|
||||||
return matched
|
return matched
|
||||||
name_parts = name.split(os.sep)
|
name_parts = name.split(os.sep)
|
||||||
# Using posix normpath here to remove duplicates
|
# Using posix normpath here to remove duplicates
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
body {
|
||||||
|
background: url("#foobar");
|
||||||
|
background: url("http:foobar");
|
||||||
|
background: url("https:foobar");
|
||||||
|
background: url("data:foobar");
|
||||||
|
background: url("//foobar");
|
||||||
|
}
|
||||||
|
|
|
@ -387,6 +387,17 @@ class TestCollectionCachedStorage(BaseCollectionTestCase,
|
||||||
self.assertNotIn(b"cached/other.css", content)
|
self.assertNotIn(b"cached/other.css", content)
|
||||||
self.assertIn(b"other.d41d8cd98f00.css", content)
|
self.assertIn(b"other.d41d8cd98f00.css", content)
|
||||||
|
|
||||||
|
def test_path_ignored_completely(self):
|
||||||
|
relpath = self.cached_file_path("cached/css/ignored.css")
|
||||||
|
self.assertEqual(relpath, "cached/css/ignored.6c77f2643390.css")
|
||||||
|
with storage.staticfiles_storage.open(relpath) as relfile:
|
||||||
|
content = relfile.read()
|
||||||
|
self.assertIn(b'#foobar', content)
|
||||||
|
self.assertIn(b'http:foobar', content)
|
||||||
|
self.assertIn(b'https:foobar', content)
|
||||||
|
self.assertIn(b'data:foobar', content)
|
||||||
|
self.assertIn(b'//foobar', content)
|
||||||
|
|
||||||
def test_path_with_querystring(self):
|
def test_path_with_querystring(self):
|
||||||
relpath = self.cached_file_path("cached/styles.css?spam=eggs")
|
relpath = self.cached_file_path("cached/styles.css?spam=eggs")
|
||||||
self.assertEqual(relpath,
|
self.assertEqual(relpath,
|
||||||
|
|
Loading…
Reference in New Issue