Fixed #24336 -- Made django.conf.urls.static() ignore all absolute URLs

This commit is contained in:
Claude Paroz 2018-07-23 18:32:46 +02:00
parent cdcf4164be
commit 2a74ceb5f3
2 changed files with 5 additions and 3 deletions

View File

@ -1,4 +1,5 @@
import re import re
from urllib.parse import urlsplit
from django.conf import settings from django.conf import settings
from django.core.exceptions import ImproperlyConfigured from django.core.exceptions import ImproperlyConfigured
@ -19,7 +20,7 @@ def static(prefix, view=serve, **kwargs):
""" """
if not prefix: if not prefix:
raise ImproperlyConfigured("Empty static prefix not permitted") raise ImproperlyConfigured("Empty static prefix not permitted")
elif not settings.DEBUG or '://' in prefix: elif not settings.DEBUG or urlsplit(prefix).netloc:
# No-op if not in debug mode or a non-local prefix. # No-op if not in debug mode or a non-local prefix.
return [] return []
return [ return [

View File

@ -153,8 +153,9 @@ class StaticHelperTest(StaticTests):
static('') static('')
def test_special_prefix(self): def test_special_prefix(self):
"""No URLs are served if prefix contains '://'.""" """No URLs are served if prefix contains a netloc part."""
self.assertEqual(static('http://'), []) self.assertEqual(static('http://example.org'), [])
self.assertEqual(static('//example.org'), [])
class StaticUtilsTests(unittest.TestCase): class StaticUtilsTests(unittest.TestCase):