gunzip: fix false end-of-file condition in rare circumstances

It turns out inflate() can output zero bytes, even if it consumed
data. This had the unfortunate side effect of returning zero bytes
(end-of-file) condition before calling the boundary callbacks. This
fixes the logic to not return zero reads on gzip boundary.

In practice this fixes the seldom seen issues of apk reporting
bad signature (when it was correct).
cute-signatures
Timo Teräs 2021-02-03 22:46:19 +02:00
parent c4c8aa5ba0
commit b43da45bc3
1 changed files with 1 additions and 1 deletions

View File

@ -104,7 +104,7 @@ static ssize_t gzi_read(struct apk_istream *is, void *ptr, size_t size)
inflateEnd(&gis->zs);
if (inflateInit2(&gis->zs, 15+32) != Z_OK)
return -ENOMEM;
if (gis->cb) goto ret;
if (gis->cb && gis->zs.avail_out != size) goto ret;
break;
case Z_OK:
break;