From 74809fdcc75c400e7d2eac4fa1b0f4113f9f395b Mon Sep 17 00:00:00 2001 From: Tom Insam Date: Mon, 3 Dec 2012 12:13:24 +0000 Subject: [PATCH] cope with unsplittable urls in smarl_urlquote. --- django/utils/html.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/django/utils/html.py b/django/utils/html.py index d914234d60..25605bea04 100644 --- a/django/utils/html.py +++ b/django/utils/html.py @@ -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.