Commit 930cdf0 for zlib
commit 930cdf07705adcc388befea891e82fe6f11d8551
Author: Mark Adler <git@madler.net>
Date: Sun Sep 20 19:03:17 2026 -0700
Restore the proper detection of truncated gzip streams.
Part of this was lost in 1.3.2.
diff --git a/gzread.c b/gzread.c
index 98908c4..1a9af4d 100644
--- a/gzread.c
+++ b/gzread.c
@@ -413,7 +413,8 @@ int ZEXPORT gzread(gzFile file, voidp buf, unsigned len) {
/* check that there was no (serious) error */
if (state->err != Z_OK && state->err != Z_BUF_ERROR && !state->again)
return -1;
- gz_error(state, Z_OK, NULL);
+ if (state->again)
+ gz_error(state, Z_OK, NULL);
/* since an int is returned, make sure len fits in one, otherwise return
with an error (this avoids a flaw in the interface) */
@@ -458,7 +459,8 @@ z_size_t ZEXPORT gzfread(voidp buf, z_size_t size, z_size_t nitems,
/* check that there was no (serious) error */
if (state->err != Z_OK && state->err != Z_BUF_ERROR && !state->again)
return 0;
- gz_error(state, Z_OK, NULL);
+ if (state->again)
+ gz_error(state, Z_OK, NULL);
/* compute bytes to read -- error on overflow */
len = nitems * size;
@@ -491,7 +493,8 @@ int ZEXPORT gzgetc(gzFile file) {
/* check that there was no (serious) error */
if (state->err != Z_OK && state->err != Z_BUF_ERROR && !state->again)
return -1;
- gz_error(state, Z_OK, NULL);
+ if (state->again)
+ gz_error(state, Z_OK, NULL);
/* try output buffer (no need to check for skip request) */
if (state->x.have) {
@@ -526,7 +529,8 @@ int ZEXPORT gzungetc(int c, gzFile file) {
/* check that there was no (serious) error */
if (state->err != Z_OK && state->err != Z_BUF_ERROR && !state->again)
return -1;
- gz_error(state, Z_OK, NULL);
+ if (state->again)
+ gz_error(state, Z_OK, NULL);
/* process a skip request */
if (state->skip && gz_skip(state) == -1)
@@ -587,7 +591,8 @@ char * ZEXPORT gzgets(gzFile file, char *buf, int len) {
/* check that there was no (serious) error */
if (state->err != Z_OK && state->err != Z_BUF_ERROR && !state->again)
return NULL;
- gz_error(state, Z_OK, NULL);
+ if (state->again)
+ gz_error(state, Z_OK, NULL);
/* process a skip request */
if (state->skip && gz_skip(state) == -1)