summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@python.org>2023-10-02 15:16:25 (GMT)
committerGitHub <noreply@github.com>2023-10-02 15:16:25 (GMT)
commit84ef145d854832f8521ea38468071ad210b6365c (patch)
treed2c04271a4cc760959fed61da5d59b0bf3332e8e
parent05b139b599bbe2125bd81eb7ac3e55743c01d974 (diff)
downloadcpython-84ef145d854832f8521ea38468071ad210b6365c.zip
cpython-84ef145d854832f8521ea38468071ad210b6365c.tar.gz
cpython-84ef145d854832f8521ea38468071ad210b6365c.tar.bz2
[3.12] gh-108948: Skip test_tarfile.test_modes() on EFTYPE error (#109697) (#109698)
gh-108948: Skip test_tarfile.test_modes() on EFTYPE error (#109697) On FreeBSD, regular users cannot set the sticky bit. Skip the test if chmod() fails with EFTYPE error. (cherry picked from commit 26e06ad617bb416201c769fea91cd33d544c6a1c)
-rw-r--r--Lib/test/test_tarfile.py19
1 files changed, 16 insertions, 3 deletions
diff --git a/Lib/test/test_tarfile.py b/Lib/test/test_tarfile.py
index 5d9714e..c5fc76d 100644
--- a/Lib/test/test_tarfile.py
+++ b/Lib/test/test_tarfile.py
@@ -1,3 +1,4 @@
+import errno
import sys
import os
import io
@@ -3798,9 +3799,21 @@ class TestExtractionFilters(unittest.TestCase):
tmp_filename = os.path.join(TEMPDIR, "tmp.file")
with open(tmp_filename, 'w'):
pass
- os.chmod(tmp_filename, os.stat(tmp_filename).st_mode | stat.S_ISVTX)
- have_sticky_files = (os.stat(tmp_filename).st_mode & stat.S_ISVTX)
- os.unlink(tmp_filename)
+ try:
+ try:
+ os.chmod(tmp_filename,
+ os.stat(tmp_filename).st_mode | stat.S_ISVTX)
+ except OSError as exc:
+ if exc.errno == getattr(errno, "EFTYPE", 0):
+ # gh-108948: On FreeBSD, regular users cannot set
+ # the sticky bit.
+ self.skipTest("chmod() failed with EFTYPE: "
+ "regular users cannot set sticky bit")
+ else:
+ raise
+ have_sticky_files = (os.stat(tmp_filename).st_mode & stat.S_ISVTX)
+ finally:
+ os.unlink(tmp_filename)
os.mkdir(tmp_filename)
os.chmod(tmp_filename, os.stat(tmp_filename).st_mode | stat.S_ISVTX)