diff options
-rw-r--r-- | Lib/ntpath.py | 13 | ||||
-rw-r--r-- | Lib/test/test_ntpath.py | 4 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Windows/2019-09-11-10-22-01.bpo-38081.8JhzjD.rst | 1 |
3 files changed, 12 insertions, 6 deletions
diff --git a/Lib/ntpath.py b/Lib/ntpath.py index 1d22d5f1dc..1b5e16f95f 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 c5c96e32d7..2f0faf9472 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 0000000000..e9d7a30eed --- /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'``. |