From 17de1678ba09323f05f276b6213a7833a3b8ba65 Mon Sep 17 00:00:00 2001 From: Bastien Montagne Date: Mon, 21 Jul 2025 15:49:50 +0200 Subject: [PATCH] Fix 'raw' version of blendfile.py reader. Broken after changes to blendfile header reading code, the `BlendFileBlockRaw` class was not updated. --- tools/modules/blendfile.py | 46 ++++---------------------------------- 1 file changed, 4 insertions(+), 42 deletions(-) diff --git a/tools/modules/blendfile.py b/tools/modules/blendfile.py index bc2a9241aa2..3d989f79446 100644 --- a/tools/modules/blendfile.py +++ b/tools/modules/blendfile.py @@ -525,8 +525,6 @@ class BlendFileRaw: "header", # struct.Struct "block_header_struct", - # namedtuple - "block_header_fields", # BlendFileBlock "blocks", # dict {addr_old: block} @@ -543,7 +541,7 @@ class BlendFileRaw: log.debug("initializing reading blend-file") self.handle = handle self.header = BlendFileHeader(handle) - self.block_header_struct, self.block_header_fields = self.header.create_block_header_struct() + self.block_header_struct = self.header.create_block_header_struct() self.blocks = [] self.code_index = {} @@ -613,7 +611,7 @@ class BlendFileRaw: self.structs[sdna_index_next].dna_type_id.decode('ascii'))) -class BlendFileBlockRaw: +class BlendFileBlockRaw(_blendfile_header.BlockHeader): """ Instance of a raw blend-file block (only contains its header currently). """ @@ -641,46 +639,10 @@ class BlendFileBlockRaw: )) def __init__(self, handle, bfile): + super().__init__(handle, bfile.block_header_struct) self.file = bfile self.user_data = None - - data = handle.read(bfile.block_header_struct.size) - - if len(data) != bfile.block_header_struct.size: - print("WARNING! Blend file seems to be badly truncated!") - self.code = b'ENDB' - self.size = 0 - self.addr_old = 0 - self.sdna_index = 0 - self.count = 0 - self.file_offset = 0 - return - # Header can be just 8 byte because of ENDB block in old .blend files. - if len(data) > 8: - blockheader = bfile.block_header_fields(*bfile.block_header_struct.unpack(data)) - self.code = blockheader[0].partition(b'\0')[0] - if self.code != b'ENDB': - self.size = blockheader.len - self.addr_old = blockheader.old - self.sdna_index = blockheader.SDNAnr - self.count = blockheader.nr - self.file_offset = handle.tell() - else: - self.size = 0 - self.addr_old = 0 - self.sdna_index = 0 - self.count = 0 - self.file_offset = 0 - else: - OLDBLOCK = struct.Struct(b'4sI') - blockheader = OLDBLOCK.unpack(data) - self.code = blockheader[0].partition(b'\0')[0] - self.code = DNA_IO.read_data0(blockheader[0]) - self.size = 0 - self.addr_old = 0 - self.sdna_index = 0 - self.count = 0 - self.file_offset = 0 + self.file_offset = handle.tell() def get_data_hash(self, seed=1): """