DF-2765 / decode.py
#!/usr/bin/env python3 """Decode the DF-2765 journal stream: prove PATH1==PATH2==target and the source path is absent.""" import struct, sys data = open(sys.argv[1] if len(sys.argv) > 1 else 'journal_stream.bin','rb').read() print("stream bytes:", len(data)) print("JTYPE_RENAME (0x801D) stream record present:", b'\x1d\x80' in data) print("PATH1 leaf (0x0402) occurrences:", data.count(struct.pack('<H',0x0402))) print("PATH2 leaf (0x0403/0x4403) occurrences:", data.count(struct.pack('<H',0x0403))) print("target path 'jt/b/dst.txt' count:", data.count(b'jt/b/dst.txt')) print("SOURCE path 'jt/a/src.txt' count:", data.count(b'jt/a/src.txt'), "(expected 0 = BUG)") # raw leaf dump inside the rename record for magic,name in ((0x0402,'PATH1'),(0x4403,'PATH2|LAST'),(0x0403,'PATH2')): i = data.find(struct.pack('<H', magic), 0x38, 0x90) if i >= 0: srs, = struct.unpack_from('<i', data, i+4) print(f"{name} @ {i:#04x} recsize={srs} value={data[i+8:i+8+max(0,srs-8)]!r}") |