From 01e890b4e9d3f191971aaf4f6f3be883d4dc5787 Mon Sep 17 00:00:00 2001 From: Erik Date: Wed, 15 Jan 2025 14:29:54 +0100 Subject: [PATCH] Adjust --- securetar/__init__.py | 1 + tests/test_tar.py | 13 +++++++------ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/securetar/__init__.py b/securetar/__init__.py index 8e138af..502be4b 100644 --- a/securetar/__init__.py +++ b/securetar/__init__.py @@ -387,6 +387,7 @@ def _add_stream( tar_info.size = size_of_inner_tar if padding: + # Update the size in the header fileobj.seek( tell_before_adding_inner_file_header + tar_info_header_len diff --git a/tests/test_tar.py b/tests/test_tar.py index 56974df..3e0e17a 100644 --- a/tests/test_tar.py +++ b/tests/test_tar.py @@ -219,11 +219,12 @@ def test_tar_inside_tar( assert main_tar.exists() - # Iterate over the tar file + # Iterate over the tar file, and check there's no securetar header files = set() with SecureTarFile(main_tar, "r", gzip=False) as tar_file: for tar_info in tar_file: - assert "_securetar.plaintext_size" not in tar_info.pax_headers + inner_tar = tar_file.extractfile(tar_info) + assert inner_tar.read(len(SECURETAR_MAGIC)) != SECURETAR_MAGIC files.add(tar_info.name) assert files == {"backup.json", *inner_tar_files} @@ -379,7 +380,7 @@ def test_encrypted_tar_inside_tar( with SecureTarFile(main_tar, "r", gzip=False, bufsize=bufsize) as tar_file: for tar_info in tar_file: inner_tar = tar_file.extractfile(tar_info) - assert inner_tar.read(16) == SECURETAR_MAGIC + assert inner_tar.read(len(SECURETAR_MAGIC)) == SECURETAR_MAGIC file_sizes[tar_info.name] = int.from_bytes(inner_tar.read(8), "big") assert set(file_sizes) == {*inner_tar_files} @@ -488,12 +489,12 @@ def test_encrypted_gzipped_tar_inside_tar_legacy_format( fixture_path = Path(__file__).parent.joinpath("fixtures") main_tar = fixture_path.joinpath("./backup_encrypted_gzipped_legacy_format.tar") - # Iterate over the tar file + # Iterate over the tar file, and check there's no securetar header files: set[str] = set() with SecureTarFile(main_tar, "r", gzip=False, bufsize=bufsize) as tar_file: for tar_info in tar_file: - assert "_securetar.plaintext_size" not in tar_info.pax_headers - assert "_securetar.version" not in tar_info.pax_headers + inner_tar = tar_file.extractfile(tar_info) + assert inner_tar.read(len(SECURETAR_MAGIC)) != SECURETAR_MAGIC files.add(tar_info.name) assert files == { "core.tar.gz",