Skip to content

Commit 84ef145

Browse files
authored
[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 26e06ad)
1 parent 05b139b commit 84ef145

File tree

1 file changed

+16
-3
lines changed

1 file changed

+16
-3
lines changed

Lib/test/test_tarfile.py

+16-3
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import errno
12
import sys
23
import os
34
import io
@@ -3798,9 +3799,21 @@ def test_modes(self):
37983799
tmp_filename = os.path.join(TEMPDIR, "tmp.file")
37993800
with open(tmp_filename, 'w'):
38003801
pass
3801-
os.chmod(tmp_filename, os.stat(tmp_filename).st_mode | stat.S_ISVTX)
3802-
have_sticky_files = (os.stat(tmp_filename).st_mode & stat.S_ISVTX)
3803-
os.unlink(tmp_filename)
3802+
try:
3803+
try:
3804+
os.chmod(tmp_filename,
3805+
os.stat(tmp_filename).st_mode | stat.S_ISVTX)
3806+
except OSError as exc:
3807+
if exc.errno == getattr(errno, "EFTYPE", 0):
3808+
# gh-108948: On FreeBSD, regular users cannot set
3809+
# the sticky bit.
3810+
self.skipTest("chmod() failed with EFTYPE: "
3811+
"regular users cannot set sticky bit")
3812+
else:
3813+
raise
3814+
have_sticky_files = (os.stat(tmp_filename).st_mode & stat.S_ISVTX)
3815+
finally:
3816+
os.unlink(tmp_filename)
38043817

38053818
os.mkdir(tmp_filename)
38063819
os.chmod(tmp_filename, os.stat(tmp_filename).st_mode | stat.S_ISVTX)

0 commit comments

Comments
 (0)