]> granicus.if.org Git - python/commitdiff
Fixed bug in the common-case code for HTTP URLs; it would lose the query,
authorAndrew M. Kuchling <amk@amk.ca>
Wed, 6 Jan 1999 22:13:09 +0000 (22:13 +0000)
committerAndrew M. Kuchling <amk@amk.ca>
Wed, 6 Jan 1999 22:13:09 +0000 (22:13 +0000)
    fragment, and/or parameter information.
3 cases added to the test suite to check for this bug.

Lib/urlparse.py

index fe2c8ded95e89badfc2b2c6c1d3f1c3fcf509708..148633e954e8e37891a65caf667c9071e6348674 100644 (file)
@@ -54,7 +54,7 @@ def urlparse(url, scheme = '', allow_fragments = 1):
        netloc = path = params = query = fragment = ''
        i = find(url, ':')
        if i > 0:
-               if url[:i] == 'http': # optimizie the common case
+               if url[:i] == 'http': # optimize the common case
                        scheme = string.lower(url[:i])
                        url = url[i+1:]
                        if url[:2] == '//':
@@ -66,16 +66,16 @@ def urlparse(url, scheme = '', allow_fragments = 1):
                        if allow_fragments:
                                i = string.rfind(url, '#')
                                if i >= 0:
-                                       url = url[:i]
                                        fragment = url[i+1:]
+                                       url = url[:i]
                        i = find(url, '?')
                        if i >= 0:
-                               url = url[:i]
                                query = url[i+1:]
+                               url = url[:i]
                        i = find(url, ';')
                        if i >= 0:
-                               url = url[:i]
                                params = url[i+1:]
+                               url = url[:i]
                        tuple = scheme, netloc, url, params, query, fragment
                        _parse_cache[key] = tuple
                        return tuple
@@ -225,6 +225,9 @@ test_input = """
       g/../h     = <URL:http://a/b/c/h>
       http:g     = <URL:http://a/b/c/g>
       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?