diff --git a/kaitaistruct.py b/kaitaistruct.py index 4c05d27..d4d6647 100644 --- a/kaitaistruct.py +++ b/kaitaistruct.py @@ -292,11 +292,21 @@ def read_bytes(self, n): "requested invalid %d amount of bytes" % (n,) ) - r = self._io.read(n) - if len(r) < n: + + is_satisfiable = True + if self._io.seekable(): + num_bytes_available = self.size() - self.pos() + is_satisfiable = (n <= num_bytes_available) + + if is_satisfiable: + r = self._io.read(n) + num_bytes_available = len(r) + is_satisfiable = (n <= num_bytes_available) + + if not is_satisfiable: raise EOFError( - "requested %d bytes, but got only %d bytes" % - (n, len(r)) + "requested %d bytes, but only %d bytes available" % + (n, num_bytes_available) ) return r