GH-126766: url2pathname(): handle 'localhost' authority (#127129)

Discard any 'localhost' authority from the beginning of a `file:` URI. As a
result, file URIs like `//localhost/etc/hosts` are correctly decoded as
`/etc/hosts`.
This commit is contained in:
Barney Gale 2024-11-22 03:17:06 +00:00 committed by GitHub
parent fcfdb55465
commit ebf564a1d3
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 15 additions and 5 deletions

View file

@ -15,14 +15,17 @@ def url2pathname(url):
# become
# C:\foo\bar\spam.foo
import string, urllib.parse
if url[:3] == '///':
# URL has an empty authority section, so the path begins on the third
# character.
url = url[2:]
elif url[:12] == '//localhost/':
# Skip past 'localhost' authority.
url = url[11:]
# Windows itself uses ":" even in URLs.
url = url.replace(':', '|')
if not '|' in url:
# No drive specifier, just convert slashes
if url[:3] == '///':
# URL has an empty authority section, so the path begins on the
# third character.
url = url[2:]
# make sure not to convert quoted slashes :-)
return urllib.parse.unquote(url.replace('/', '\\'))
comp = url.split('|')