diff options
-rw-r--r-- | Lib/test/test_urlparse.py | 5 | ||||
-rw-r--r-- | Lib/urlparse.py | 13 | ||||
-rw-r--r-- | Misc/NEWS | 2 |
3 files changed, 13 insertions, 7 deletions
diff --git a/Lib/test/test_urlparse.py b/Lib/test/test_urlparse.py index bf9e317684..fff8408d60 100644 --- a/Lib/test/test_urlparse.py +++ b/Lib/test/test_urlparse.py @@ -316,6 +316,11 @@ class UrlParseTestCase(unittest.TestCase): self.assertEqual(type(p.hostname), type(uri)) self.assertEqual(type(p.path), type(uri)) + def test_noslash(self): + # Issue 1637: http://foo.com?query is legal + self.assertEqual(urlparse.urlparse("http://example.com?blahblah=/foo"), + ('http', 'example.com', '', '', 'blahblah=/foo', '')) + def test_main(): test_support.run_unittest(UrlParseTestCase) diff --git a/Lib/urlparse.py b/Lib/urlparse.py index 4bf0af3d0c..7a2e6ce746 100644 --- a/Lib/urlparse.py +++ b/Lib/urlparse.py @@ -169,13 +169,12 @@ def _splitparams(url): return url[:i], url[i+1:] def _splitnetloc(url, start=0): - for c in '/?#': # the order is important! - delim = url.find(c, start) - if delim >= 0: - break - else: - delim = len(url) - return url[start:delim], url[delim:] + delim = len(url) # position of end of domain part of url, default is end + 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 + delim = min(delim, wdelim) # use earliest delim position + return url[start:delim], url[delim:] # return (domain, rest) def urlsplit(url, scheme='', allow_fragments=True): """Parse a URL into 5 components: @@ -342,6 +342,8 @@ Core and builtins Library ------- +- Patch #1637: fix urlparse for URLs like 'http://x.com?arg=/foo'. + - Patch #1698: allow '@' in username parsed by urlparse.py. - Issue #1735: TarFile.extractall() now correctly sets directory permissions |