summaryrefslogtreecommitdiff
path: root/inflate.c
diff options
context:
space:
mode:
authorMark Adler <madler@alumni.caltech.edu>2017-04-16 08:35:33 -0700
committerHans Kristian Rosbach <hk-github@circlestorm.org>2018-12-13 14:21:20 +0100
commit3cbd82cffce0d0f9021fc2f3a715a27f3edddd5b (patch)
treef5fb2ec92390194cbed67437855bfab55f82b346 /inflate.c
parentd3714a7bd0b5440a42d91006fc3cbe773174b368 (diff)
Handle case where inflateSync used when header never processed.
If zlib and/or gzip header processing was requested, but a header was never provided and inflateSync was used successfully, then the inflate state would be inconsistent, trying to compute a check value but with no flags set. This commit sets the inflate mode to raw in this case, since there is no other assumption that can be made if a header was requested but never seen.
Diffstat (limited to 'inflate.c')
-rw-r--r--inflate.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/inflate.c b/inflate.c
index cb84adb..d2e621e 100644
--- a/inflate.c
+++ b/inflate.c
@@ -1409,6 +1409,8 @@ int ZEXPORT PREFIX(inflateSync)(PREFIX3(stream) *strm) {
/* return no joy or set up to restart inflate() on a new block */
if (state->have != 4)
return Z_DATA_ERROR;
+ if (state->mode == HEAD)
+ state->wrap = 0; /* never processed header, so assume raw */
in = strm->total_in;
out = strm->total_out;
PREFIX(inflateReset)(strm);