Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 8 additions & 3 deletions 11 Lib/ntpath.py
Original file line number Diff line number Diff line change
Expand Up @@ -458,7 +458,8 @@ def normpath(path):
# in the case of paths with these prefixes:
# \\.\ -> device names
# \\?\ -> literal paths
# do not do any normalization, but return the path unchanged
# do not do any normalization, but return the path
# unchanged apart from the call to os.fspath()
return path
path = path.replace(altsep, sep)
prefix, path = splitdrive(path)
Expand Down Expand Up @@ -575,7 +576,7 @@ def _getfinalpathname_nonstrict(path):
return abspath(tail)

def realpath(path):
path = os.fspath(path)
path = normpath(path)
if isinstance(path, bytes):
prefix = b'\\\\?\\'
unc_prefix = b'\\\\?\\UNC\\'
Expand All @@ -586,6 +587,7 @@ def realpath(path):
unc_prefix = '\\\\?\\UNC\\'
new_unc_prefix = '\\\\'
cwd = os.getcwd()
did_not_exist = not exists(path)
had_prefix = path.startswith(prefix)
path = _getfinalpathname_nonstrict(path)
# The path returned by _getfinalpathname will always start with \\?\ -
Expand All @@ -603,7 +605,10 @@ def realpath(path):
if _getfinalpathname(spath) == path:
path = spath
except OSError as ex:
pass
# If the path does not exist and originally did not exist, then
# strip the prefix anyway.
if ex.winerror in {2, 3} and did_not_exist:
path = spath
return path


Expand Down
4 changes: 2 additions & 2 deletions 4 Lib/test/test_ntpath.py
Original file line number Diff line number Diff line change
Expand Up @@ -333,11 +333,11 @@ def test_realpath_symlink_loops(self):
self.assertEqual(ntpath.realpath(ABSTFN + "1\\.."),
ntpath.dirname(ABSTFN))
self.assertEqual(ntpath.realpath(ABSTFN + "1\\..\\x"),
ntpath.dirname(P + ABSTFN) + "\\x")
ntpath.dirname(ABSTFN) + "\\x")
os.symlink(ABSTFN + "x", ABSTFN + "y")
self.assertEqual(ntpath.realpath(ABSTFN + "1\\..\\"
+ ntpath.basename(ABSTFN) + "y"),
P + ABSTFN + "x")
ABSTFN + "x")
self.assertIn(ntpath.realpath(ABSTFN + "1\\..\\"
+ ntpath.basename(ABSTFN) + "1"),
expected)
Expand Down
Morty Proxy This is a proxified and sanitized view of the page, visit original site.