File tree Expand file tree Collapse file tree 4 files changed +15
-5
lines changed Expand file tree Collapse file tree 4 files changed +15
-5
lines changed Original file line number Diff line number Diff line change @@ -15,14 +15,17 @@ def url2pathname(url):
1515 # become
1616 # C:\foo\bar\spam.foo
1717 import string , urllib .parse
18+ if url [:3 ] == '///' :
19+ # URL has an empty authority section, so the path begins on the third
20+ # character.
21+ url = url [2 :]
22+ elif url [:12 ] == '//localhost/' :
23+ # Skip past 'localhost' authority.
24+ url = url [11 :]
1825 # Windows itself uses ":" even in URLs.
1926 url = url .replace (':' , '|' )
2027 if not '|' in url :
2128 # No drive specifier, just convert slashes
22- if url [:3 ] == '///' :
23- # URL has an empty authority section, so the path begins on the
24- # third character.
25- url = url [2 :]
2629 # make sure not to convert quoted slashes :-)
2730 return urllib .parse .unquote (url .replace ('/' , '\\ ' ))
2831 comp = url .split ('|' )
Original file line number Diff line number Diff line change @@ -1595,6 +1595,8 @@ def test_url2pathname_win(self):
15951595 # Localhost paths
15961596 self .assertEqual (fn ('//localhost/C:/path/to/file' ), 'C:\\ path\\ to\\ file' )
15971597 self .assertEqual (fn ('//localhost/C|/path/to/file' ), 'C:\\ path\\ to\\ file' )
1598+ self .assertEqual (fn ('//localhost/path/to/file' ), '\\ path\\ to\\ file' )
1599+ self .assertEqual (fn ('//localhost//server/path/to/file' ), '\\ \\ server\\ path\\ to\\ file' )
15981600 # Percent-encoded forward slashes are preserved for backwards compatibility
15991601 self .assertEqual (fn ('C:/foo%2fbar' ), 'C:\\ foo/bar' )
16001602 self .assertEqual (fn ('//server/share/foo%2fbar' ), '\\ \\ server\\ share\\ foo/bar' )
@@ -1613,7 +1615,7 @@ def test_url2pathname_posix(self):
16131615 self .assertEqual (fn ('//foo/bar' ), '//foo/bar' )
16141616 self .assertEqual (fn ('///foo/bar' ), '/foo/bar' )
16151617 self .assertEqual (fn ('////foo/bar' ), '//foo/bar' )
1616- self .assertEqual (fn ('//localhost/foo/bar' ), '//localhost/ foo/bar' )
1618+ self .assertEqual (fn ('//localhost/foo/bar' ), '/foo/bar' )
16171619
16181620 @unittest .skipUnless (os_helper .FS_NONASCII , 'need os_helper.FS_NONASCII' )
16191621 def test_url2pathname_nonascii (self ):
Original file line number Diff line number Diff line change @@ -1660,6 +1660,9 @@ def url2pathname(pathname):
16601660 # URL has an empty authority section, so the path begins on the
16611661 # third character.
16621662 pathname = pathname [2 :]
1663+ elif pathname [:12 ] == '//localhost/' :
1664+ # Skip past 'localhost' authority.
1665+ pathname = pathname [11 :]
16631666 encoding = sys .getfilesystemencoding ()
16641667 errors = sys .getfilesystemencodeerrors ()
16651668 return unquote (pathname , encoding = encoding , errors = errors )
Original file line number Diff line number Diff line change 1+ Fix issue where :func: `urllib.request.url2pathname ` failed to discard any
2+ 'localhost' authority present in the URL.
You can’t perform that action at this time.
0 commit comments