[Python-checkins] cpython (merge 3.6 -> default): Issue #29416: Prevent infinite loop in pathlib.Path.mkdir

steve.dower python-checkins at python.org
Sat Feb 4 17:57:23 EST 2017


https://hg.python.org/cpython/rev/09c018897fb3
changeset:   106423:09c018897fb3
parent:      106420:476b0fa34db4
parent:      106422:3de58a54ed98
user:        Steve Dower <steve.dower at microsoft.com>
date:        Sat Feb 04 14:56:57 2017 -0800
summary:
  Issue #29416: Prevent infinite loop in pathlib.Path.mkdir

files:
  Lib/pathlib.py           |   2 +-
  Lib/test/test_pathlib.py |  11 +++++++++++
  Misc/NEWS                |   2 ++
  3 files changed, 14 insertions(+), 1 deletions(-)


diff --git a/Lib/pathlib.py b/Lib/pathlib.py
--- a/Lib/pathlib.py
+++ b/Lib/pathlib.py
@@ -1235,7 +1235,7 @@
                 if not exist_ok or not self.is_dir():
                     raise
             except OSError as e:
-                if e.errno != ENOENT:
+                if e.errno != ENOENT or self.parent == self:
                     raise
                 self.parent.mkdir(parents=True)
                 self._accessor.mkdir(self, mode)
diff --git a/Lib/test/test_pathlib.py b/Lib/test/test_pathlib.py
--- a/Lib/test/test_pathlib.py
+++ b/Lib/test/test_pathlib.py
@@ -1776,6 +1776,17 @@
         self.assertTrue(p.exists())
         self.assertEqual(p.stat().st_ctime, st_ctime_first)
 
+    @only_nt    # XXX: not sure how to test this on POSIX
+    def test_mkdir_with_unknown_drive(self):
+        for d in 'ZYXWVUTSRQPONMLKJIHGFEDCBA':
+            p = self.cls(d + ':\\')
+            if not p.is_dir():
+                break
+        else:
+            self.skipTest("cannot find a drive that doesn't exist")
+        with self.assertRaises(OSError):
+            (p / 'child' / 'path').mkdir(parents=True)
+
     def test_mkdir_with_child_file(self):
         p = self.cls(BASE, 'dirB', 'fileB')
         self.assertTrue(p.exists())
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -223,6 +223,8 @@
 Library
 -------
 
+- Issue #29416: Prevent infinite loop in pathlib.Path.mkdir
+
 - Issue #29444: Fixed out-of-bounds buffer access in the group() method of
   the match object.  Based on patch by WGH.
 

-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list