dissect.archive 1.9.dev3__tar.gz → 1.9.dev4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/PKG-INFO +1 -1
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/dissect/archive/tibx/lsm.py +6 -1
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/dissect.archive.egg-info/PKG-INFO +1 -1
- dissect_archive-1.9.dev4/dissect.archive.egg-info/scm_version.json +8 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/tests/tibx/test_lsm.py +7 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/tests/tibx/test_tibx_acronis.py +7 -1
- dissect_archive-1.9.dev3/dissect.archive.egg-info/scm_version.json +0 -8
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/.git-blame-ignore-revs +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/.gitattributes +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/COPYRIGHT +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/LICENSE +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/MANIFEST.in +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/README.md +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/dissect/archive/__init__.py +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/dissect/archive/c_vbk.py +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/dissect/archive/c_vma.py +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/dissect/archive/c_wim.py +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/dissect/archive/exceptions.py +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/dissect/archive/tibx/__init__.py +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/dissect/archive/tibx/c_tibx.py +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/dissect/archive/tibx/c_tibx.pyi +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/dissect/archive/tibx/codec.py +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/dissect/archive/tibx/crypto.py +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/dissect/archive/tibx/exception.py +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/dissect/archive/tibx/map.py +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/dissect/archive/tibx/page.py +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/dissect/archive/tibx/segment.py +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/dissect/archive/tibx/stream.py +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/dissect/archive/tibx/tibx.py +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/dissect/archive/tools/__init__.py +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/dissect/archive/tools/backup.py +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/dissect/archive/vbk.py +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/dissect/archive/vma.py +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/dissect/archive/wim.py +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/dissect/archive/xva.py +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/dissect.archive.egg-info/SOURCES.txt +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/dissect.archive.egg-info/dependency_links.txt +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/dissect.archive.egg-info/entry_points.txt +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/dissect.archive.egg-info/requires.txt +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/dissect.archive.egg-info/scm_file_list.json +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/dissect.archive.egg-info/top_level.txt +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/pyproject.toml +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/setup.cfg +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/tests/__init__.py +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/tests/_data/acronis/tibx/ati_2020_disk_enc_lz4_compr.tibx +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/tests/_data/acronis/tibx/ati_2020_disk_lz4_compr.tibx +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/tests/_data/acronis/tibx/t1_chain_diff-0001.tibx +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/tests/_data/acronis/tibx/t1_chain_diff.tibx +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/tests/_data/acronis/tibx/t1_chain_inc.tibx +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/tests/_data/acronis/tibx/t1_disk_gpt.tibx +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/tests/_data/acronis/tibx/t1_disk_mbr.tibx +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/tests/_data/acronis/tibx/t1_empty_ntfs.tibx +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/tests/_data/acronis/tibx/t1_enc_aes.tibx +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/tests/_data/acronis/tibx/t1_legacy_tib.tibx +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/tests/_data/acronis/tibx/t1_multivol.tibx +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/tests/_data/acronis/tibx/t1_simple_ntfs.tibx +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/tests/_data/acronis/tibx/t1_stored.tibx +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/tests/_data/basic16k.wim.gz +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/tests/_data/basic32k.wim.gz +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/tests/_data/basic4k.wim.gz +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/tests/_data/basic8k.wim.gz +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/tests/_data/test.vma.gz +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/tests/_data/test13.vbk.gz +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/tests/_data/test9.vbk.gz +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/tests/_docs/Makefile +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/tests/_docs/__init__.py +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/tests/_docs/conf.py +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/tests/_docs/index.rst +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/tests/_tools/__init__.py +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/tests/_tools/tibx/__init__.py +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/tests/_tools/tibx/_synth.py +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/tests/conftest.py +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/tests/test_exceptions.py +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/tests/test_vbk.py +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/tests/test_vma.py +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/tests/test_wim.py +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/tests/tibx/__init__.py +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/tests/tibx/test_codec.py +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/tests/tibx/test_crypto.py +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/tests/tibx/test_page.py +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/tests/tibx/test_recovery.py +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/tests/tibx/test_segment.py +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/tests/tibx/test_tibx.py +0 -0
- {dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/tox.ini +0 -0
|
@@ -87,7 +87,12 @@ class LsmSuperBlock:
|
|
|
87
87
|
if payload[:4] != LSM_MAGIC_SUPERBLOCK:
|
|
88
88
|
raise CorruptArchiveError(f"L-SB magic missing in TLV slot {tlv_index}")
|
|
89
89
|
self.tlv_index = tlv_index
|
|
90
|
-
|
|
90
|
+
try:
|
|
91
|
+
self.sb = c_tibx.lsm_superblock(payload)
|
|
92
|
+
except EOFError:
|
|
93
|
+
# The header of an archive cut off after its first page is short, and so is the
|
|
94
|
+
# L-SB that runs past the cut
|
|
95
|
+
raise CorruptArchiveError(f"L-SB truncated in TLV slot {tlv_index}")
|
|
91
96
|
self.seq = self.sb.seq
|
|
92
97
|
self.key_length = self.sb.key_length
|
|
93
98
|
self.value_length = self.sb.value_length
|
|
@@ -122,6 +122,13 @@ def test_lsb_parse_memtree_and_ctrees() -> None:
|
|
|
122
122
|
assert not LsmSuperBlock(lsb(8, 4), tlv_index=1).has_records
|
|
123
123
|
|
|
124
124
|
|
|
125
|
+
def test_lsb_truncated() -> None:
|
|
126
|
+
# cstruct raises EOFError on a short buffer; callers should only ever see the parser's
|
|
127
|
+
# own exception type.
|
|
128
|
+
with pytest.raises(CorruptArchiveError, match="L-SB truncated in TLV slot 1"):
|
|
129
|
+
LsmSuperBlock(lsb(8, 4)[:16], tlv_index=1)
|
|
130
|
+
|
|
131
|
+
|
|
125
132
|
def test_lsb_ignores_slots_past_nr_ctree() -> None:
|
|
126
133
|
# Acronis reads only nr_ctree slots: a stale ctree past them is not part of the tree
|
|
127
134
|
payload = bytearray(lsb(8, 4, ctrees=[(3 * PAGE, 5)]))
|
|
@@ -18,7 +18,7 @@ import io
|
|
|
18
18
|
import pytest
|
|
19
19
|
|
|
20
20
|
from dissect.archive.tibx.c_tibx import PAGE_SIZE, TLV_SEGMENT_MAP, c_tibx
|
|
21
|
-
from dissect.archive.tibx.exception import InvalidPasswordError
|
|
21
|
+
from dissect.archive.tibx.exception import CorruptArchiveError, InvalidPasswordError
|
|
22
22
|
from dissect.archive.tibx.lsm import iter_tree_cells
|
|
23
23
|
from dissect.archive.tibx.map import load_segment_index
|
|
24
24
|
from dissect.archive.tibx.page import (
|
|
@@ -457,3 +457,9 @@ def test_acronis_commit_info_crc64_mismatch() -> None:
|
|
|
457
457
|
store = PageStore(io.BytesIO(bytes(data)))
|
|
458
458
|
assert store._commit_info_at(0xF6000) is None
|
|
459
459
|
assert store.live_root().offset == 0xB6000
|
|
460
|
+
|
|
461
|
+
|
|
462
|
+
def test_acronis_truncated_header() -> None:
|
|
463
|
+
# Cut off after its first page, the archive holds only part of its two-page ARCH header
|
|
464
|
+
with pytest.raises(CorruptArchiveError, match="L-SB truncated"):
|
|
465
|
+
TIBX(io.BytesIO(_sample("t1_chain_inc")[:PAGE_SIZE]))
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/dissect.archive.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/dissect.archive.egg-info/entry_points.txt
RENAMED
|
File without changes
|
|
File without changes
|
{dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/dissect.archive.egg-info/scm_file_list.json
RENAMED
|
File without changes
|
{dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/dissect.archive.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/tests/_data/acronis/tibx/t1_chain_diff.tibx
RENAMED
|
File without changes
|
{dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/tests/_data/acronis/tibx/t1_chain_inc.tibx
RENAMED
|
File without changes
|
{dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/tests/_data/acronis/tibx/t1_disk_gpt.tibx
RENAMED
|
File without changes
|
{dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/tests/_data/acronis/tibx/t1_disk_mbr.tibx
RENAMED
|
File without changes
|
{dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/tests/_data/acronis/tibx/t1_empty_ntfs.tibx
RENAMED
|
File without changes
|
{dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/tests/_data/acronis/tibx/t1_enc_aes.tibx
RENAMED
|
File without changes
|
{dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/tests/_data/acronis/tibx/t1_legacy_tib.tibx
RENAMED
|
File without changes
|
{dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/tests/_data/acronis/tibx/t1_multivol.tibx
RENAMED
|
File without changes
|
{dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/tests/_data/acronis/tibx/t1_simple_ntfs.tibx
RENAMED
|
File without changes
|
{dissect_archive-1.9.dev3 → dissect_archive-1.9.dev4}/tests/_data/acronis/tibx/t1_stored.tibx
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|