diff options
author | Steve Dower <steve.dower@python.org> | 2019-09-11 09:48:36 (GMT) |
---|---|---|
committer | Zachary Ware <zachary.ware@gmail.com> | 2019-09-11 09:48:36 (GMT) |
commit | 92521fea5d0d4aeb9b6a3c3fdd4654af700ad5c8 (patch) | |
tree | 7ae2a23543d91404755d096ba5b2bb38888b4f2b | |
parent | 455122a0094c8cfdf7e062eccc5e5b5885c75e8b (diff) | |
download | cpython-92521fea5d0d4aeb9b6a3c3fdd4654af700ad5c8.zip cpython-92521fea5d0d4aeb9b6a3c3fdd4654af700ad5c8.tar.gz cpython-92521fea5d0d4aeb9b6a3c3fdd4654af700ad5c8.tar.bz2 |
bpo-38081: Fixes ntpath.realpath('NUL') (GH-15899)
-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 1d22d5f..1b5e16f 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 c5c96e3..2f0faf9 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 0000000..e9d7a30 --- /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'``. |