[Python-checkins] r80278 - in python/branches/py3k: Lib/test/test_urlparse.py Lib/urllib/parse.py

senthil.kumaran python-checkins at python.org
Tue Apr 20 22:42:50 CEST 2010


Author: senthil.kumaran
Date: Tue Apr 20 22:42:50 2010
New Revision: 80278

Log:
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.
........


Modified:
   python/branches/py3k/   (props changed)
   python/branches/py3k/Lib/test/test_urlparse.py
   python/branches/py3k/Lib/urllib/parse.py

Modified: python/branches/py3k/Lib/test/test_urlparse.py
==============================================================================
--- python/branches/py3k/Lib/test/test_urlparse.py	(original)
+++ python/branches/py3k/Lib/test/test_urlparse.py	Tue Apr 20 22:42:50 2010
@@ -273,6 +273,7 @@
         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))

Modified: python/branches/py3k/Lib/urllib/parse.py
==============================================================================
--- python/branches/py3k/Lib/urllib/parse.py	(original)
+++ python/branches/py3k/Lib/urllib/parse.py	Tue Apr 20 22:42:50 2010
@@ -95,8 +95,6 @@
         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 _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 @@
             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 @@
             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:


More information about the Python-checkins mailing list