From 2eaef05c4727f9eb4abda89eba5dd90053cfcb41 Mon Sep 17 00:00:00 2001 From: Senthil Kumaran Date: Tue, 20 Apr 2010 20:42:50 +0000 Subject: Merged revisions 80277 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r80277 | senthil.kumaran | 2010-04-21 02:07:59 +0530 (Wed, 21 Apr 2010) | 3 lines Issue2987 - Added additional Invalid URL and changed the Invalid URL checking code for better. ........ --- Lib/test/test_urlparse.py | 1 + Lib/urllib/parse.py | 14 ++++++++------ 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/Lib/test/test_urlparse.py b/Lib/test/test_urlparse.py index 8c8070b..a0b2d77 100644 --- a/Lib/test/test_urlparse.py +++ b/Lib/test/test_urlparse.py @@ -273,6 +273,7 @@ class UrlParseTestCase(unittest.TestCase): for invalid_url in [ 'http://::12.34.56.78]/', 'http://[::1/foo/', + 'http://[::1/foo/bad]/bad', 'http://[::ffff:12.34.56.78']: self.assertRaises(ValueError, lambda : urllib.parse.urlparse(invalid_url).hostname) self.assertRaises(ValueError, lambda : urllib.parse.urlparse(invalid_url)) diff --git a/Lib/urllib/parse.py b/Lib/urllib/parse.py index 8883ff0..4f48b25 100644 --- a/Lib/urllib/parse.py +++ b/Lib/urllib/parse.py @@ -95,8 +95,6 @@ class ResultMixin(object): netloc = self.netloc.split('@')[-1] if '[' in netloc and ']' in netloc: return netloc.split(']')[0][1:].lower() - elif '[' in netloc or ']' in netloc: - raise ValueError("Invalid IPv6 hostname") elif ':' in netloc: return netloc.split(':')[0].lower() elif netloc == '': @@ -156,10 +154,6 @@ def _splitparams(url): def _splitnetloc(url, start=0): delim = len(url) # position of end of domain part of url, default is end - if '[' in url: # check for invalid IPv6 URL - if not ']' in url: raise ValueError("Invalid IPv6 URL") - elif ']' in url: - if not '[' in url: raise ValueError("Invalid IPv6 URL") for c in '/?#': # look for delimiters; the order is NOT important wdelim = url.find(c, start) # find first of this delim if wdelim >= 0: # if found @@ -187,6 +181,10 @@ def urlsplit(url, scheme='', allow_fragments=True): url = url[i+1:] if url[:2] == '//': netloc, url = _splitnetloc(url, 2) + if '[' in netloc : + if not ']' in netloc: raise ValueError("Invalid IPv6 URL") + if ']' in netloc: + if not '[' in netloc: raise ValueError("Invalid IPv6 URL") if allow_fragments and '#' in url: url, fragment = url.split('#', 1) if '?' in url: @@ -201,6 +199,10 @@ def urlsplit(url, scheme='', allow_fragments=True): scheme, url = url[:i].lower(), url[i+1:] if url[:2] == '//': netloc, url = _splitnetloc(url, 2) + if '[' in netloc: + if not ']' in netloc: raise ValueError("Invalid IPv6 URL") + if ']' in netloc: + if not '[' in netloc: raise ValueError("Invalid IPv6 URL") if allow_fragments and scheme in uses_fragment and '#' in url: url, fragment = url.split('#', 1) if scheme in uses_query and '?' in url: -- cgit v0.12