mirror of
https://github.com/python/cpython.git
synced 2024-11-23 01:45:25 +08:00
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/':
|
elif url[:12] == '//localhost/':
|
||||||
# Skip past 'localhost' authority.
|
# Skip past 'localhost' authority.
|
||||||
url = url[11:]
|
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.
|
# Windows itself uses ":" even in URLs.
|
||||||
url = url.replace(':', '|')
|
url = url.replace(':', '|')
|
||||||
if not '|' in url:
|
if not '|' in url:
|
||||||
|
@ -1492,7 +1492,7 @@ class Pathname_Tests(unittest.TestCase):
|
|||||||
# UNC paths
|
# 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')
|
||||||
self.assertEqual(fn('/////server/path/to/file'), '\\\\\\server\\path\\to\\file')
|
self.assertEqual(fn('/////server/path/to/file'), '\\\\server\\path\\to\\file')
|
||||||
# Localhost paths
|
# 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')
|
||||||
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
Block a user