Commit 5c355201 authored by Andrew M. Kuchling's avatar Andrew M. Kuchling

Fixed bug in the common-case code for HTTP URLs; it would lose the query,

    fragment, and/or parameter information.
3 cases added to the test suite to check for this bug.
parent 2386d733
...@@ -54,7 +54,7 @@ def urlparse(url, scheme = '', allow_fragments = 1): ...@@ -54,7 +54,7 @@ def urlparse(url, scheme = '', allow_fragments = 1):
netloc = path = params = query = fragment = '' netloc = path = params = query = fragment = ''
i = find(url, ':') i = find(url, ':')
if i > 0: if i > 0:
if url[:i] == 'http': # optimizie the common case if url[:i] == 'http': # optimize the common case
scheme = string.lower(url[:i]) scheme = string.lower(url[:i])
url = url[i+1:] url = url[i+1:]
if url[:2] == '//': if url[:2] == '//':
...@@ -66,16 +66,16 @@ def urlparse(url, scheme = '', allow_fragments = 1): ...@@ -66,16 +66,16 @@ def urlparse(url, scheme = '', allow_fragments = 1):
if allow_fragments: if allow_fragments:
i = string.rfind(url, '#') i = string.rfind(url, '#')
if i >= 0: if i >= 0:
url = url[:i]
fragment = url[i+1:] fragment = url[i+1:]
url = url[:i]
i = find(url, '?') i = find(url, '?')
if i >= 0: if i >= 0:
url = url[:i]
query = url[i+1:] query = url[i+1:]
url = url[:i]
i = find(url, ';') i = find(url, ';')
if i >= 0: if i >= 0:
url = url[:i]
params = url[i+1:] params = url[i+1:]
url = url[:i]
tuple = scheme, netloc, url, params, query, fragment tuple = scheme, netloc, url, params, query, fragment
_parse_cache[key] = tuple _parse_cache[key] = tuple
return tuple return tuple
...@@ -225,6 +225,9 @@ test_input = """ ...@@ -225,6 +225,9 @@ test_input = """
g/../h = <URL:http://a/b/c/h> g/../h = <URL:http://a/b/c/h>
http:g = <URL:http://a/b/c/g> http:g = <URL:http://a/b/c/g>
http: = <URL:http://a/b/c/d> http: = <URL:http://a/b/c/d>
http:?y = <URL:http://a/b/c/d?y>
http:g?y = <URL:http://a/b/c/g?y>
http:g?y/./x = <URL:http://a/b/c/g?y/./x>
""" """
# XXX The result for //g is actually http://g/; is this a problem? # XXX The result for //g is actually http://g/; is this a problem?
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment