ruby / zlib

Ruby interface for the zlib compression/decompression library
Other
49 stars 35 forks source link

In Zlib::GzipReader#eof? check if we're actually at eof #72

Closed martinemde closed 6 months ago

martinemde commented 8 months ago

When checking for eof?, read ahead until we can confidently say that either there is more content or the stream is finished. If reading ahead fills the z->buf, we are not at eof.

It's possible that only empty blocks or the footer remain to be read from the input stream. If eof? is only based on current status of the stream, a following read may produce no output, causing an EOFError because there's nothing left to return. This only happens for very specific gzip file lengths that hit exactly at a modulo of the read size, leaving only empty blocks and the footer remaining to be read.

Fixes #56

martinemde commented 6 months ago

@nobu thank you 🙇‍♂️