summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>2008-01-05 22:19:06 (GMT)
committerGuido van Rossum <guido@python.org>2008-01-05 22:19:06 (GMT)
commitc6a04c2629c43b104b81e8584be21aa1b8bae77f (patch)
tree4eed51ce7065079de67ed04f4674cd58240c5b0d /Lib
parent3001c5463ecfb8fe17b434733b1bfc399b89e80e (diff)
downloadcpython-c6a04c2629c43b104b81e8584be21aa1b8bae77f.zip
cpython-c6a04c2629c43b104b81e8584be21aa1b8bae77f.tar.gz
cpython-c6a04c2629c43b104b81e8584be21aa1b8bae77f.tar.bz2
Patch #1637: fix urlparse for URLs like 'http://x.com?arg=/foo'.
Fix by John Nagle.
Diffstat (limited to 'Lib')
-rw-r--r--Lib/test/test_urlparse.py5
-rw-r--r--Lib/urlparse.py13
2 files changed, 11 insertions, 7 deletions
diff --git a/Lib/test/test_urlparse.py b/Lib/test/test_urlparse.py
index bf9e317..fff8408 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 4bf0af3..7a2e6ce 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: