Mercurial > cpython-lru_cache-weakref
diff Lib/urlparse.py @ 34379:287e71f44d79 2.4
Backport patch #712317: In URLs such as http://www.example.com?query=spam,
treat '?' as a delimiter. Previously, the 'network location' (<authority> in
RFC 2396) would become 'www.example.com?query=spam', while RFC 2396 does not
allow a '?' in <authority>. See bug #548176 for further discussion.
| author | Johannes Gijsbers <jlg@dds.nl> |
|---|---|
| date | Sun, 09 Jan 2005 15:32:37 +0000 |
| parents | ff6b97cdd864 |
| children | 349a0fd598e0 |
line wrap: on
line diff
--- a/Lib/urlparse.py Sun Jan 09 05:53:27 2005 +0000 +++ b/Lib/urlparse.py Sun Jan 09 15:32:37 2005 +0000 @@ -63,6 +63,15 @@ i = url.find(';') 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:] + def urlsplit(url, scheme='', allow_fragments=1): """Parse a URL into 5 components: <scheme>://<netloc>/<path>?<query>#<fragment> @@ -82,13 +91,7 @@ scheme = url[:i].lower() url = url[i+1:] if url[:2] == '//': - i = url.find('/', 2) - if i < 0: - i = url.find('#') - if i < 0: - i = len(url) - netloc = url[2:i] - url = url[i:] + netloc, url = _splitnetloc(url, 2) if allow_fragments and '#' in url: url, fragment = url.split('#', 1) if '?' in url: @@ -101,12 +104,8 @@ break else: scheme, url = url[:i].lower(), url[i+1:] - if scheme in uses_netloc: - if url[:2] == '//': - i = url.find('/', 2) - if i < 0: - i = len(url) - netloc, url = url[2:i], url[i:] + if scheme in uses_netloc and url[:2] == '//': + netloc, url = _splitnetloc(url, 2) if allow_fragments and scheme in uses_fragment and '#' in url: url, fragment = url.split('#', 1) if scheme in uses_query and '?' in url:
