summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
authorJannis Leidel <jannis@leidel.info>2010-02-28 12:01:18 +0000
committerJannis Leidel <jannis@leidel.info>2010-02-28 12:01:18 +0000
commit68f216a6925e5e0d78e499157b2c2a261bb7f24c (patch)
treea448420894b281403e27ef80235740e3ac89aab6 /django
parentd7abb33e70cf91c983b997cbeafbea2cd0371762 (diff)
Fixed #12989 - Fixed verification of IDN URLs. Thanks to Fraser Nevett for the report and patch.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@12620 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'django')
-rw-r--r--django/core/validators.py19
1 files changed, 7 insertions, 12 deletions
diff --git a/django/core/validators.py b/django/core/validators.py
index 765266ea27..b1b82dbf0d 100644
--- a/django/core/validators.py
+++ b/django/core/validators.py
@@ -58,23 +58,18 @@ class URLValidator(RegexValidator):
except ValidationError, e:
# Trivial case failed. Try for possible IDN domain
if value:
- original = value
value = smart_unicode(value)
- splitted = urlparse.urlsplit(value)
+ scheme, netloc, path, query, fragment = urlparse.urlsplit(value)
try:
- netloc_ace = splitted[1].encode('idna') # IDN -> ACE
+ netloc = netloc.encode('idna') # IDN -> ACE
except UnicodeError: # invalid domain part
raise e
- value = value.replace(splitted[1], netloc_ace)
- # If no URL path given, assume /
- if not splitted[2]:
- value += u'/'
- super(URLValidator, self).__call__(value)
- # After validation revert ACE encoded domain-part to
- # original (IDN) value as suggested by RFC 3490
- value = original
+ url = urlparse.urlunsplit((scheme, netloc, path, query, fragment))
+ super(URLValidator, self).__call__(url)
else:
raise
+ else:
+ url = value
if self.verify_exists:
import urllib2
@@ -86,7 +81,7 @@ class URLValidator(RegexValidator):
"User-Agent": self.user_agent,
}
try:
- req = urllib2.Request(value, None, headers)
+ req = urllib2.Request(url, None, headers)
u = urllib2.urlopen(req)
except ValueError:
raise ValidationError(_(u'Enter a valid URL.'), code='invalid')