From 9fe2698887ba3fd0eccdd47feb99c37423d47c65 Mon Sep 17 00:00:00 2001 From: Yun Zheng Hu Date: Wed, 28 Jan 2026 22:16:12 +0100 Subject: [PATCH] Allow OverlayStream overlay at offset 0 --- dissect/util/stream.py | 2 +- tests/test_stream.py | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/dissect/util/stream.py b/dissect/util/stream.py index af93116..a0af22e 100644 --- a/dissect/util/stream.py +++ b/dissect/util/stream.py @@ -547,7 +547,7 @@ def _read(self, offset: int, length: int) -> bytes: if length == 0: break - if next_overlay_offset: + if next_overlay_offset is not None: next_overlay_size, next_overlay_data = overlays[next_overlay_offset] gap_to_next_overlay = next_overlay_offset - offset diff --git a/tests/test_stream.py b/tests/test_stream.py index 98ec45d..898ae4d 100644 --- a/tests/test_stream.py +++ b/tests/test_stream.py @@ -194,6 +194,22 @@ def test_overlay_stream() -> None: assert fh.read(100) == b"\x04" * 4 +def test_overlay_stream_add_at_offset_zero() -> None: + buf = io.BytesIO(b"\x00" * 100) + fh = stream.OverlayStream(buf, size=100) + + # Add a small overlay at offset zero + fh.add(0, b"MZ") + + assert fh.read(2) == b"MZ" + + fh.seek(0) + assert fh.read(100) == b"MZ" + (b"\x00" * 98) + + fh.seek(0) + assert fh.read() == b"MZ" + (b"\x00" * 98) + + def test_zlib_stream() -> None: data = b"\x01" * 8192 + b"\x02" * 8192 + b"\x03" * 8192 + b"\x04" * 8192 fh = stream.ZlibStream(io.BytesIO(zlib.compress(data)), size=8192 * 4, align=512)