]> granicus.if.org Git - python/commitdiff
Sjoerd Mullender writes:
authorGuido van Rossum <guido@python.org>
Thu, 18 Mar 1999 15:10:44 +0000 (15:10 +0000)
committerGuido van Rossum <guido@python.org>
Thu, 18 Mar 1999 15:10:44 +0000 (15:10 +0000)
If a filename on Windows starts with \\, it is converted to a URL
which starts with ////.  If this URL is passed to urlparse.urlparse
you get a path that starts with // (and an empty netloc).  If you pass
the result back to urlparse.urlunparse, you get a URL that starts with
//, which is parsed differently by urlparse.urlparse.  The fix is to
add the (empty) netloc with accompanying slashes if the path in
urlunparse starts with //.  Do this for all schemes that use a netloc.

Lib/urlparse.py

index 698b726bb0953dad978e8177f49c10649a54e25e..4552e6e5f3d5885a97aa00d0735cc1e6f8fa202c 100644 (file)
@@ -112,9 +112,9 @@ def urlparse(url, scheme = '', allow_fragments = 1):
 # had redundant delimiters, e.g. a ? with an empty query (the draft
 # states that these are equivalent).
 def urlunparse((scheme, netloc, url, params, query, fragment)):
-       if netloc:
+       if netloc or (scheme in uses_netloc and url[:2] == '//'):
                if url[:1] != '/': url = '/' + url
-               url = '//' + netloc + url
+               url = '//' + (netloc or '') + url
        if scheme:
                url = scheme + ':' + url
        if params: