summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteve Dower <steve.dower@python.org>2019-09-11 09:48:36 (GMT)
committerZachary Ware <zachary.ware@gmail.com>2019-09-11 09:48:36 (GMT)
commit92521fea5d0d4aeb9b6a3c3fdd4654af700ad5c8 (patch)
tree7ae2a23543d91404755d096ba5b2bb38888b4f2b
parent455122a0094c8cfdf7e062eccc5e5b5885c75e8b (diff)
downloadcpython-92521fea5d0d4aeb9b6a3c3fdd4654af700ad5c8.zip
cpython-92521fea5d0d4aeb9b6a3c3fdd4654af700ad5c8.tar.gz
cpython-92521fea5d0d4aeb9b6a3c3fdd4654af700ad5c8.tar.bz2
bpo-38081: Fixes ntpath.realpath('NUL') (GH-15899)
-rw-r--r--Lib/ntpath.py13
-rw-r--r--Lib/test/test_ntpath.py4
-rw-r--r--Misc/NEWS.d/next/Windows/2019-09-11-10-22-01.bpo-38081.8JhzjD.rst1
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'``.