18
18
https://py7zr.readthedocs.io/en/latest/archive_format.html
19
19
"""
20
20
import binascii
21
- from typing import Optional
21
+ from typing import Dict , Optional
22
22
23
+ from dissect .cstruct import Instance
23
24
from structlog import get_logger
24
25
25
26
from unblob .extractors import Command
@@ -57,6 +58,9 @@ class SevenZipHandler(StructHandler):
57
58
HEADER_STRUCT = "sevenzip_header_t"
58
59
EXTRACTOR = Command ("7z" , "x" , "-p" , "-y" , "{inpath}" , "-o{outdir}" )
59
60
61
+ def get_metadata (self , header : Instance ) -> Dict :
62
+ return {"version_maj" : header .version_maj , "version_min" : header .version_min }
63
+
60
64
def calculate_chunk (self , file : File , start_offset : int ) -> Optional [ValidChunk ]:
61
65
header = self .parse_header (file )
62
66
@@ -67,9 +71,10 @@ def calculate_chunk(self, file: File, start_offset: int) -> Optional[ValidChunk]
67
71
logger .debug ("Invalid header CRC" , _verbosity = 2 )
68
72
return None
69
73
74
+ metadata = self .get_metadata (header )
70
75
# We read the signature header here to get the offset to the header database
71
76
first_db_header = start_offset + len (header ) + header .next_header_offset
72
77
end_offset = first_db_header + header .next_header_size
73
78
return ValidChunk (
74
- start_offset = start_offset , end_offset = end_offset , metadata = header
79
+ start_offset = start_offset , end_offset = end_offset , metadata = metadata
75
80
)
0 commit comments