From 92521fea5d0d4aeb9b6a3c3fdd4654af700ad5c8 Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Wed, 11 Sep 2019 10:48:36 +0100 Subject: [PATCH] bpo-38081: Fixes ntpath.realpath('NUL') (GH-15899) --- Lib/ntpath.py | 13 +++++++------ Lib/test/test_ntpath.py | 4 ++++ .../2019-09-11-10-22-01.bpo-38081.8JhzjD.rst | 1 + 3 files changed, 12 insertions(+), 6 deletions(-) create mode 100644 Misc/NEWS.d/next/Windows/2019-09-11-10-22-01.bpo-38081.8JhzjD.rst diff --git a/Lib/ntpath.py b/Lib/ntpath.py index 1d22d5f1dc2..1b5e16f95f1 100644 --- a/Lib/ntpath.py +++ b/Lib/ntpath.py @@ -535,9 +535,10 @@ else: try: path = _nt_readlink(path) except OSError as ex: - # Stop on file (2) or directory (3) not found, or - # paths that are not reparse points (4390) - if ex.winerror in (2, 3, 4390): + # Stop on incorrect function (1), file (2) or + # directory (3) not found, or paths that are + # not reparse points (4390) + if ex.winerror in (1, 2, 3, 4390): break raise except ValueError: @@ -553,9 +554,9 @@ else: except OSError: pass - # Allow file (2) or directory (3) not found, invalid syntax (123), - # and symlinks that cannot be followed (1921) - allowed_winerror = 2, 3, 123, 1921 + # Allow file (2) or directory (3) not found, incorrect parameter (87), + # invalid syntax (123), and symlinks that cannot be followed (1921) + allowed_winerror = 2, 3, 87, 123, 1921 # Non-strict algorithm is to find as much of the target directory # as we can and join the rest. diff --git a/Lib/test/test_ntpath.py b/Lib/test/test_ntpath.py index c5c96e32d74..2f0faf94726 100644 --- a/Lib/test/test_ntpath.py +++ b/Lib/test/test_ntpath.py @@ -400,6 +400,10 @@ class TestNtpath(NtpathTestCase): self.assertPathEqual(ntpath.realpath("\\\\?\\" + ABSTFN + "3.link"), "\\\\?\\" + ABSTFN + "3.") + @unittest.skipUnless(HAVE_GETFINALPATHNAME, 'need _getfinalpathname') + def test_realpath_nul(self): + tester("ntpath.realpath('NUL')", r'\\.\NUL') + def test_expandvars(self): with support.EnvironmentVarGuard() as env: env.clear() diff --git a/Misc/NEWS.d/next/Windows/2019-09-11-10-22-01.bpo-38081.8JhzjD.rst b/Misc/NEWS.d/next/Windows/2019-09-11-10-22-01.bpo-38081.8JhzjD.rst new file mode 100644 index 00000000000..e9d7a30eed9 --- /dev/null +++ b/Misc/NEWS.d/next/Windows/2019-09-11-10-22-01.bpo-38081.8JhzjD.rst @@ -0,0 +1 @@ +Prevent error calling :func:`os.path.realpath` on ``'NUL'``.