Hi,
Olivier Taibi wrote on Wed, Apr 15, 2020 at 07:52:21PM +0200:
> I believe there is a bug in gzopen(3) when opening an empty file. It
> can read both gzipped and uncompressed files, and obviously an empty
> file falls in the second category, but in this case the first read gives
> a buffer error (Z_BUF_ERROR in zlib.h) instead of EOF (Z_STREAM_END in
> zlib.h) because the stream is incorrectly identified as gzipped.
>From code inspection, i believe this analysis to be correct.
> The following diff fixes this issue for me.
I believe the patch is correct and i'd like to commit it.
I have tested all code path directly leading from gz_open()
into check_header().
However, i'm not quite sure how to test the call of check_header()
from gzread(). Marc, is that the fancy feature you are using
in packages? I'd hate breaking pkg_add(1), and so shortly before
lock even more so. Does anybody know how to test that code path,
and can anybody confirm that it still works as expected?
Any OKs to commit this?
Or does anybody think that there might be fallout in ports and it
should be postponed until after unlock?
Yours,
Ingo
> Index: gzio.c
> ===================================================================
> RCS file: /cvs/src/lib/libz/gzio.c,v
> retrieving revision 1.14
> diff -u -p -u -p -r1.14 gzio.c
> --- gzio.c 20 Jul 2005 15:56:41 -0000 1.14
> +++ gzio.c 15 Apr 2020 12:54:37 -0000
> @@ -307,7 +307,7 @@ local void check_header(s)
> s->stream.avail_in += len;
> s->stream.next_in = s->inbuf;
> if (s->stream.avail_in < 2) {
> - s->transparent = s->stream.avail_in;
> + s->transparent = 1;
> return;
> }
> }