]> granicus.if.org Git - python/commitdiff
bpo-38081: Fixes ntpath.realpath('NUL') (GH-15899)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Wed, 11 Sep 2019 10:43:30 +0000 (03:43 -0700)
committerGitHub <noreply@github.com>
Wed, 11 Sep 2019 10:43:30 +0000 (03:43 -0700)
(cherry picked from commit 92521fea5d0d4aeb9b6a3c3fdd4654af700ad5c8)

Co-authored-by: Steve Dower <steve.dower@python.org>
Lib/ntpath.py
Lib/test/test_ntpath.py
Misc/NEWS.d/next/Windows/2019-09-11-10-22-01.bpo-38081.8JhzjD.rst [new file with mode: 0644]

index 1d22d5f1dc2ab5d26ec157cd754e2afea881d887..1b5e16f95f1659157fec977a3d3633ca53439722 100644 (file)
@@ -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.
index c5c96e32d7473cfbda70a6bfee0ad791aad15241..2f0faf94726fd2742b2d8a256af67614242b5279 100644 (file)
@@ -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 (file)
index 0000000..e9d7a30
--- /dev/null
@@ -0,0 +1 @@
+Prevent error calling :func:`os.path.realpath` on ``'NUL'``.