mirror of
https://github.com/python/cpython.git
synced 2025-08-03 16:39:00 +00:00
gh-121999: Change default tarfile filter to 'data' (GH-122002)
Co-authored-by: Tomas R <tomas.roun8@gmail.com> Co-authored-by: Scott Odle <scott@sjodle.com> Co-authored-by: Bénédikt Tran <10796600+picnixz@users.noreply.github.com> Co-authored-by: Petr Viktorin <encukou@gmail.com>
This commit is contained in:
parent
bc94cf7e25
commit
dcafb362f7
6 changed files with 76 additions and 76 deletions
|
@ -722,6 +722,24 @@ class MiscReadTestBase(CommonReadTest):
|
|||
tar.close()
|
||||
os_helper.rmtree(DIR)
|
||||
|
||||
@staticmethod
|
||||
def test_extractall_default_filter():
|
||||
# Test that the default filter is now "data", and the other filter types are not used.
|
||||
DIR = pathlib.Path(TEMPDIR) / "extractall_default_filter"
|
||||
with (
|
||||
os_helper.temp_dir(DIR),
|
||||
tarfile.open(tarname, encoding="iso8859-1") as tar,
|
||||
unittest.mock.patch("tarfile.data_filter", wraps=tarfile.data_filter) as mock_data_filter,
|
||||
unittest.mock.patch("tarfile.tar_filter", wraps=tarfile.tar_filter) as mock_tar_filter,
|
||||
unittest.mock.patch("tarfile.fully_trusted_filter", wraps=tarfile.fully_trusted_filter) as mock_ft_filter
|
||||
):
|
||||
directories = [t for t in tar if t.isdir()]
|
||||
tar.extractall(DIR, directories)
|
||||
|
||||
mock_data_filter.assert_called()
|
||||
mock_ft_filter.assert_not_called()
|
||||
mock_tar_filter.assert_not_called()
|
||||
|
||||
@os_helper.skip_unless_working_chmod
|
||||
def test_extract_directory(self):
|
||||
dirtype = "ustar/dirtype"
|
||||
|
@ -738,31 +756,6 @@ class MiscReadTestBase(CommonReadTest):
|
|||
finally:
|
||||
os_helper.rmtree(DIR)
|
||||
|
||||
def test_deprecation_if_no_filter_passed_to_extractall(self):
|
||||
DIR = pathlib.Path(TEMPDIR) / "extractall"
|
||||
with (
|
||||
os_helper.temp_dir(DIR),
|
||||
tarfile.open(tarname, encoding="iso8859-1") as tar
|
||||
):
|
||||
directories = [t for t in tar if t.isdir()]
|
||||
with self.assertWarnsRegex(DeprecationWarning, "Use the filter argument") as cm:
|
||||
tar.extractall(DIR, directories)
|
||||
# check that the stacklevel of the deprecation warning is correct:
|
||||
self.assertEqual(cm.filename, __file__)
|
||||
|
||||
def test_deprecation_if_no_filter_passed_to_extract(self):
|
||||
dirtype = "ustar/dirtype"
|
||||
DIR = pathlib.Path(TEMPDIR) / "extractall"
|
||||
with (
|
||||
os_helper.temp_dir(DIR),
|
||||
tarfile.open(tarname, encoding="iso8859-1") as tar
|
||||
):
|
||||
tarinfo = tar.getmember(dirtype)
|
||||
with self.assertWarnsRegex(DeprecationWarning, "Use the filter argument") as cm:
|
||||
tar.extract(tarinfo, path=DIR)
|
||||
# check that the stacklevel of the deprecation warning is correct:
|
||||
self.assertEqual(cm.filename, __file__)
|
||||
|
||||
def test_extractall_pathlike_dir(self):
|
||||
DIR = os.path.join(TEMPDIR, "extractall")
|
||||
with os_helper.temp_dir(DIR), \
|
||||
|
@ -4011,15 +4004,6 @@ class TestExtractionFilters(unittest.TestCase):
|
|||
self.assertIs(filtered.name, tarinfo.name)
|
||||
self.assertIs(filtered.type, tarinfo.type)
|
||||
|
||||
def test_default_filter_warns(self):
|
||||
"""Ensure the default filter warns"""
|
||||
with ArchiveMaker() as arc:
|
||||
arc.add('foo')
|
||||
with warnings_helper.check_warnings(
|
||||
('Python 3.14', DeprecationWarning)):
|
||||
with self.check_context(arc.open(), None):
|
||||
self.expect_file('foo')
|
||||
|
||||
def test_change_default_filter_on_instance(self):
|
||||
tar = tarfile.TarFile(tarname, 'r')
|
||||
def strict_filter(tarinfo, path):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue