]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-86533: Make Path.mkdir parent_mode tests umask-independent (#150040)
authorGregory P. Smith <68491+gpshead@users.noreply.github.com>
Tue, 19 May 2026 01:19:06 +0000 (18:19 -0700)
committerGitHub <noreply@github.com>
Tue, 19 May 2026 01:19:06 +0000 (01:19 +0000)
test_mkdir_with_parent_mode, test_mkdir_parent_mode_deep_hierarchy and
test_mkdir_parent_mode_same_as_mode assert exact directory mode bits but
did not pin the process umask.  On buildbots running with a restrictive
umask (e.g. 0o077) the 0o755 leaf was masked down to 0o700, failing the
assertions.  Wrap them in os_helper.temp_umask(0o022), matching the
other umask-aware mkdir tests in this file.

Lib/test/test_pathlib/test_pathlib.py

index 5d13d5aadc741264ab91f417caf421f815641426..2cb4876f5c6400aeb9f92c7ff767aae651d1a7a9 100644 (file)
@@ -2526,14 +2526,15 @@ class PathTest(PurePathTest):
         p = self.cls(self.base, 'newdirPM', 'subdirPM')
         self.assertFalse(p.exists())
         if os.name != 'nt':
-            # Specify different modes for parent and leaf directories
-            p.mkdir(0o755, parents=True, parent_mode=0o750)
-            self.assertTrue(p.exists())
-            self.assertTrue(p.is_dir())
-            # Leaf directory gets the mode parameter
-            self.assertEqual(p.stat().st_mode & 0o777, 0o755)
-            # Parent directory gets the parent_mode parameter
-            self.assertEqual(p.parent.stat().st_mode & 0o777, 0o750)
+            with os_helper.temp_umask(0o022):
+                # Specify different modes for parent and leaf directories
+                p.mkdir(0o755, parents=True, parent_mode=0o750)
+                self.assertTrue(p.exists())
+                self.assertTrue(p.is_dir())
+                # Leaf directory gets the mode parameter
+                self.assertEqual(p.stat().st_mode & 0o777, 0o755)
+                # Parent directory gets the parent_mode parameter
+                self.assertEqual(p.parent.stat().st_mode & 0o777, 0o750)
 
     @unittest.skipIf(
         is_emscripten or is_wasi,
@@ -2548,15 +2549,16 @@ class PathTest(PurePathTest):
         p = self.cls(self.base, 'level1PM', 'level2PM', 'level3PM')
         self.assertFalse(p.exists())
         if os.name != 'nt':
-            p.mkdir(0o755, parents=True, parent_mode=0o700)
-            self.assertTrue(p.exists())
-            # Check that all parent directories have parent_mode
-            level1 = self.cls(self.base, 'level1PM')
-            level2 = level1 / 'level2PM'
-            self.assertEqual(level1.stat().st_mode & 0o777, 0o700)
-            self.assertEqual(level2.stat().st_mode & 0o777, 0o700)
-            # Leaf directory has the regular mode
-            self.assertEqual(p.stat().st_mode & 0o777, 0o755)
+            with os_helper.temp_umask(0o022):
+                p.mkdir(0o755, parents=True, parent_mode=0o700)
+                self.assertTrue(p.exists())
+                # Check that all parent directories have parent_mode
+                level1 = self.cls(self.base, 'level1PM')
+                level2 = level1 / 'level2PM'
+                self.assertEqual(level1.stat().st_mode & 0o777, 0o700)
+                self.assertEqual(level2.stat().st_mode & 0o777, 0o700)
+                # Leaf directory has the regular mode
+                self.assertEqual(p.stat().st_mode & 0o777, 0o755)
 
     @unittest.skipIf(
         is_emscripten or is_wasi,
@@ -2593,11 +2595,12 @@ class PathTest(PurePathTest):
         p = self.cls(self.base, 'samedirPM', 'subdirPM')
         self.assertFalse(p.exists())
         if os.name != 'nt':
-            p.mkdir(0o705, parents=True, parent_mode=0o705)
-            self.assertTrue(p.exists())
-            # Both directories should have the same mode
-            self.assertEqual(p.stat().st_mode & 0o777, 0o705)
-            self.assertEqual(p.parent.stat().st_mode & 0o777, 0o705)
+            with os_helper.temp_umask(0o022):
+                p.mkdir(0o705, parents=True, parent_mode=0o705)
+                self.assertTrue(p.exists())
+                # Both directories should have the same mode
+                self.assertEqual(p.stat().st_mode & 0o777, 0o705)
+                self.assertEqual(p.parent.stat().st_mode & 0o777, 0o705)
 
     @needs_symlinks
     def test_symlink_to(self):