mirror of https://github.com/python/cpython.git
GH-127078: `url2pathname()`: handle extra slash before UNC drive in URL path (#127132)
Decode a file URI like `file://///server/share` as a UNC path like `\\server\share`. This form of file URI is created by software the simply prepends `file:///` to any absolute Windows path.
This commit is contained in:
parent
ebf564a1d3
commit
8c98ed846a
|
@ -22,6 +22,9 @@ def url2pathname(url):
|
|||
elif url[:12] == '//localhost/':
|
||||
# Skip past 'localhost' authority.
|
||||
url = url[11:]
|
||||
if url[:3] == '///':
|
||||
# Skip past extra slash before UNC drive in URL path.
|
||||
url = url[1:]
|
||||
# Windows itself uses ":" even in URLs.
|
||||
url = url.replace(':', '|')
|
||||
if not '|' in url:
|
||||
|
|
|
@ -1492,7 +1492,7 @@ def test_url2pathname_win(self):
|
|||
# UNC paths
|
||||
self.assertEqual(fn('//server/path/to/file'), '\\\\server\\path\\to\\file')
|
||||
self.assertEqual(fn('////server/path/to/file'), '\\\\server\\path\\to\\file')
|
||||
self.assertEqual(fn('/////server/path/to/file'), '\\\\\\server\\path\\to\\file')
|
||||
self.assertEqual(fn('/////server/path/to/file'), '\\\\server\\path\\to\\file')
|
||||
# Localhost paths
|
||||
self.assertEqual(fn('//localhost/C:/path/to/file'), 'C:\\path\\to\\file')
|
||||
self.assertEqual(fn('//localhost/C|/path/to/file'), 'C:\\path\\to\\file')
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
Fix issue where :func:`urllib.request.url2pathname` failed to discard an
|
||||
extra slash before a UNC drive in the URL path on Windows.
|
Loading…
Reference in New Issue