mirror of
https://github.com/django/django.git
synced 2024-11-29 22:56:46 +01:00
Merge pull request #573 from tominsam/master
Fixed #19070: urlize template filter raises exception in some cases
This commit is contained in:
commit
501c7a221c
@ -150,13 +150,17 @@ fix_ampersands = allow_lazy(fix_ampersands, six.text_type)
|
||||
def smart_urlquote(url):
|
||||
"Quotes a URL if it isn't already quoted."
|
||||
# Handle IDN before quoting.
|
||||
scheme, netloc, path, query, fragment = urlsplit(url)
|
||||
try:
|
||||
netloc = netloc.encode('idna').decode('ascii') # IDN -> ACE
|
||||
except UnicodeError: # invalid domain part
|
||||
scheme, netloc, path, query, fragment = urlsplit(url)
|
||||
try:
|
||||
netloc = netloc.encode('idna').decode('ascii') # IDN -> ACE
|
||||
except UnicodeError: # invalid domain part
|
||||
pass
|
||||
else:
|
||||
url = urlunsplit((scheme, netloc, path, query, fragment))
|
||||
except ValueError:
|
||||
# invalid IPv6 URL (normally square brackets in hostname part).
|
||||
pass
|
||||
else:
|
||||
url = urlunsplit((scheme, netloc, path, query, fragment))
|
||||
|
||||
# An URL is considered unquoted if it contains no % characters or
|
||||
# contains a % not followed by two hexadecimal digits. See #9655.
|
||||
|
@ -310,6 +310,10 @@ class DefaultFiltersTests(TestCase):
|
||||
self.assertEqual(urlize('[see www.example.com]'),
|
||||
'[see <a href="http://www.example.com" rel="nofollow">www.example.com</a>]' )
|
||||
|
||||
# Check urlize doesn't crash when square bracket is prepended to url (#19070)
|
||||
self.assertEqual(urlize('see test[at[example.com'),
|
||||
'see <a href="http://test[at[example.com" rel="nofollow">test[at[example.com</a>' )
|
||||
|
||||
|
||||
def test_wordcount(self):
|
||||
self.assertEqual(wordcount(''), 0)
|
||||
|
Loading…
Reference in New Issue
Block a user