1818https://py7zr.readthedocs.io/en/latest/archive_format.html
1919"""
2020import binascii
21- from typing import Optional
21+ from typing import Dict , Optional
2222
23+ from dissect .cstruct import Instance
2324from structlog import get_logger
2425
2526from unblob .extractors import Command
@@ -57,6 +58,9 @@ class SevenZipHandler(StructHandler):
5758 HEADER_STRUCT = "sevenzip_header_t"
5859 EXTRACTOR = Command ("7z" , "x" , "-p" , "-y" , "{inpath}" , "-o{outdir}" )
5960
61+ def get_metadata (self , header : Instance ) -> Dict :
62+ return {"version_maj" : header .version_maj , "version_min" : header .version_min }
63+
6064 def calculate_chunk (self , file : File , start_offset : int ) -> Optional [ValidChunk ]:
6165 header = self .parse_header (file )
6266
@@ -67,9 +71,10 @@ def calculate_chunk(self, file: File, start_offset: int) -> Optional[ValidChunk]
6771 logger .debug ("Invalid header CRC" , _verbosity = 2 )
6872 return None
6973
74+ metadata = self .get_metadata (header )
7075 # We read the signature header here to get the offset to the header database
7176 first_db_header = start_offset + len (header ) + header .next_header_offset
7277 end_offset = first_db_header + header .next_header_size
7378 return ValidChunk (
74- start_offset = start_offset , end_offset = end_offset , metadata = header
79+ start_offset = start_offset , end_offset = end_offset , metadata = metadata
7580 )
0 commit comments