38 if len(data) < BND4_HEADER_LEN
or data[:4] != b
"BND4":
39 sys.exit(
"Not a BND4 / .sl2 file.")
41 if count
is None or not (0 < count <= 64):
42 sys.exit(f
"Implausible BND4 entry count: {count}")
44 for i
in range(count):
45 base = BND4_HEADER_LEN + BND4_ENTRY_LEN * i
46 if base + BND4_ENTRY_LEN > len(data):
47 sys.exit(f
"Truncated entry header #{i}.")
48 size = u64(data, base + 8)
49 offset = u32(data, base + 16)
50 if size
is None or offset
is None or offset + size > len(data)
or size <= 0:
52 f
"Entry #{i} points outside the file (offset={offset}, size={size})."
54 entries.append(
Bnd4Entry(i, offset, size))
One decoded BND4 entry: its index and where its blob lives in the file.
__init__(self, index, offset, size)
Construct from already-validated fields.