From 6704c0db5361f3d5dc07dfb8349c2fbce9b32387 Mon Sep 17 00:00:00 2001 From: Erik Schamper <1254028+Schamper@users.noreply.github.com> Date: Wed, 18 Oct 2023 09:57:05 +0200 Subject: [PATCH] Fix EOF reads on streams with an unknown size (#33) --- dissect/util/stream.py | 3 ++- tests/test_stream.py | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/dissect/util/stream.py b/dissect/util/stream.py index f8583b0..7b89c7f 100644 --- a/dissect/util/stream.py +++ b/dissect/util/stream.py @@ -95,8 +95,9 @@ def read(self, n: int = -1) -> bytes: if self._buf: buffer_pos = self._pos - self._pos_align r.append(self._buf[buffer_pos:]) + self._set_pos(self._pos_align + align) - r.append(self._read(self._pos_align + align, -1)) + r.append(self._read(self._pos_align, -1)) buf = b"".join(r) self._set_pos(self._pos + len(buf)) diff --git a/tests/test_stream.py b/tests/test_stream.py index cd6231e..1bf57be 100644 --- a/tests/test_stream.py +++ b/tests/test_stream.py @@ -58,6 +58,10 @@ def test_relative_stream(): assert fh.read(15) == b"\x02" * 5 + b"\x03" * 10 assert fh.read(1) == b"" + fh.seek(0) + fh._buf = None + assert fh.read() == b"\x01" * 5 + b"\x02" * 10 + b"\x03" * 10 + def test_buffered_stream(): buf = io.BytesIO(b"\x01" * 512 + b"\x02" * 512 + b"\x03" * 512)