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.
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 thez->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