Merge pull request #283 from mjtamlyn/ipv6-address-validation
Fixed #18779 -- URLValidator can't validate url with ipv6.
This commit is contained in:
commit
e41c308014
|
@ -44,7 +44,8 @@ class URLValidator(RegexValidator):
|
||||||
r'^(?:http|ftp)s?://' # http:// or https://
|
r'^(?:http|ftp)s?://' # http:// or https://
|
||||||
r'(?:(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+(?:[A-Z]{2,6}\.?|[A-Z0-9-]{2,}\.?)|' #domain...
|
r'(?:(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+(?:[A-Z]{2,6}\.?|[A-Z0-9-]{2,}\.?)|' #domain...
|
||||||
r'localhost|' #localhost...
|
r'localhost|' #localhost...
|
||||||
r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})' # ...or ip
|
r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}|' # ...or ipv4
|
||||||
|
r'\[?[A-F0-9]*:[A-F0-9:]+\]?)' # ...or ipv6
|
||||||
r'(?::\d+)?' # optional port
|
r'(?::\d+)?' # optional port
|
||||||
r'(?:/?|[/?]\S+)$', re.IGNORECASE)
|
r'(?:/?|[/?]\S+)$', re.IGNORECASE)
|
||||||
|
|
||||||
|
|
|
@ -668,6 +668,18 @@ class FieldsTests(SimpleTestCase):
|
||||||
# Valid IDN
|
# Valid IDN
|
||||||
self.assertEqual(url, f.clean(url))
|
self.assertEqual(url, f.clean(url))
|
||||||
|
|
||||||
|
def test_urlfield_10(self):
|
||||||
|
"""Test URLField correctly validates IPv6 (#18779)."""
|
||||||
|
f = URLField()
|
||||||
|
urls = (
|
||||||
|
'http://::/',
|
||||||
|
'http://6:21b4:92/',
|
||||||
|
'http://[12:34:3a53]/',
|
||||||
|
'http://[a34:9238::]:8080/',
|
||||||
|
)
|
||||||
|
for url in urls:
|
||||||
|
self.assertEqual(url, f.clean(url))
|
||||||
|
|
||||||
def test_urlfield_not_string(self):
|
def test_urlfield_not_string(self):
|
||||||
f = URLField(required=False)
|
f = URLField(required=False)
|
||||||
self.assertRaisesMessage(ValidationError, "'Enter a valid URL.'", f.clean, 23)
|
self.assertRaisesMessage(ValidationError, "'Enter a valid URL.'", f.clean, 23)
|
||||||
|
|
Loading…
Reference in New Issue