]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.13] GH-85633: Fix pathlib test failures on filesystems without world-write. (GH...
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Tue, 13 Aug 2024 17:39:14 +0000 (19:39 +0200)
committerGitHub <noreply@github.com>
Tue, 13 Aug 2024 17:39:14 +0000 (17:39 +0000)
GH-85633: Fix pathlib test failures on filesystems without world-write. (GH-122883)

Replace `umask(0)` with `umask(0o002)` so the created files are not
world-writable, and replace `umask(0o022)` with `umask(0o026)` to check
that permissions for 'others' can still be set.
(cherry picked from commit 5f6851152254b4b9d70af4ae5aea3f20965cee28)

Co-authored-by: Barney Gale <barney.gale@gmail.com>
Lib/test/test_pathlib/test_pathlib.py

index 5fd1a41cbee17b2415167f343e7dc97ce338abfb..ff054e76efcd60c6ed687fcc2a9e1992c289ad88 100644 (file)
@@ -1296,18 +1296,20 @@ class PathTest(test_pathlib_abc.DummyPathTest, PurePathTest):
     )
     @needs_posix
     def test_open_mode(self):
-        old_mask = os.umask(0)
+        # Unmask all permissions except world-write, which may
+        # not be supported on some filesystems (see GH-85633.)
+        old_mask = os.umask(0o002)
         self.addCleanup(os.umask, old_mask)
         p = self.cls(self.base)
         with (p / 'new_file').open('wb'):
             pass
         st = os.stat(self.parser.join(self.base, 'new_file'))
-        self.assertEqual(stat.S_IMODE(st.st_mode), 0o666)
-        os.umask(0o022)
+        self.assertEqual(stat.S_IMODE(st.st_mode), 0o664)
+        os.umask(0o026)
         with (p / 'other_new_file').open('wb'):
             pass
         st = os.stat(self.parser.join(self.base, 'other_new_file'))
-        self.assertEqual(stat.S_IMODE(st.st_mode), 0o644)
+        self.assertEqual(stat.S_IMODE(st.st_mode), 0o640)
 
     @needs_posix
     def test_resolve_root(self):
@@ -1325,16 +1327,18 @@ class PathTest(test_pathlib_abc.DummyPathTest, PurePathTest):
     )
     @needs_posix
     def test_touch_mode(self):
-        old_mask = os.umask(0)
+        # Unmask all permissions except world-write, which may
+        # not be supported on some filesystems (see GH-85633.)
+        old_mask = os.umask(0o002)
         self.addCleanup(os.umask, old_mask)
         p = self.cls(self.base)
         (p / 'new_file').touch()
         st = os.stat(self.parser.join(self.base, 'new_file'))
-        self.assertEqual(stat.S_IMODE(st.st_mode), 0o666)
-        os.umask(0o022)
+        self.assertEqual(stat.S_IMODE(st.st_mode), 0o664)
+        os.umask(0o026)
         (p / 'other_new_file').touch()
         st = os.stat(self.parser.join(self.base, 'other_new_file'))
-        self.assertEqual(stat.S_IMODE(st.st_mode), 0o644)
+        self.assertEqual(stat.S_IMODE(st.st_mode), 0o640)
         (p / 'masked_new_file').touch(mode=0o750)
         st = os.stat(self.parser.join(self.base, 'masked_new_file'))
         self.assertEqual(stat.S_IMODE(st.st_mode), 0o750)