From: Victor Stinner Date: Thu, 21 Sep 2023 23:29:49 +0000 (+0200) Subject: [3.11] gh-108948: Skip test_tarfile.test_modes() on EFTYPE error (#109697) (#109699) X-Git-Tag: v3.11.6~63 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=3a6d8e615f4094328f6ed67e8bf314409dd3df26;p=thirdparty%2FPython%2Fcpython.git [3.11] gh-108948: Skip test_tarfile.test_modes() on EFTYPE error (#109697) (#109699) 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) --- diff --git a/Lib/test/test_tarfile.py b/Lib/test/test_tarfile.py index 623452d50ce8..cad13a9e071e 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 @@ -3723,9 +3724,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)