summaryrefslogtreecommitdiffstats
path: root/Lib/urllib
diff options
context:
space:
mode:
authorBarney Gale <barney.gale@gmail.com>2024-11-14 20:22:14 (GMT)
committerGitHub <noreply@github.com>2024-11-14 20:22:14 (GMT)
commitcae9d9d20f61cdbde0765efa340b6b596c31b67f (patch)
tree72fd81537fbe2b3989fbaf3f952ad8c65da7d0f7 /Lib/urllib
parent47cbf038850852cdcbe7a404ed7c64542340d58a (diff)
downloadcpython-cae9d9d20f61cdbde0765efa340b6b596c31b67f.zip
cpython-cae9d9d20f61cdbde0765efa340b6b596c31b67f.tar.gz
cpython-cae9d9d20f61cdbde0765efa340b6b596c31b67f.tar.bz2
GH-126766: `url2pathname()`: handle empty authority section. (#126767)
Discard two leading slashes from the beginning of a `file:` URI if they introduce an empty authority section. As a result, file URIs like `///etc/hosts` are correctly parsed as `/etc/hosts`.
Diffstat (limited to 'Lib/urllib')
-rw-r--r--Lib/urllib/request.py4
1 files changed, 4 insertions, 0 deletions
diff --git a/Lib/urllib/request.py b/Lib/urllib/request.py
index bc35d8a..18a837d 100644
--- a/Lib/urllib/request.py
+++ b/Lib/urllib/request.py
@@ -1656,6 +1656,10 @@ else:
def url2pathname(pathname):
"""OS-specific conversion from a relative URL of the 'file' scheme
to a file system path; not recommended for general use."""
+ if pathname[:3] == '///':
+ # URL has an empty authority section, so the path begins on the
+ # third character.
+ pathname = pathname[2:]
return unquote(pathname)
def pathname2url(pathname):