summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--deflate.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/deflate.c b/deflate.c
index 5bb3cce..d614c37 100644
--- a/deflate.c
+++ b/deflate.c
@@ -2447,9 +2447,12 @@ int deflate_decompress_data(deflate_decompress_ctx *dctx,
error = DEFLATE_ERR_UNCOMP_HDR;
goto finished;
}
- if (dctx->uncomplen == 0)
- dctx->state = OUTSIDEBLK; /* block is empty */
- else
+ if (dctx->uncomplen == 0) {/* block is empty */
+ if (dctx->lastblock)
+ dctx->state = END;
+ else
+ dctx->state = OUTSIDEBLK;
+ } else
dctx->state = UNCOMP_DATA;
break;
case UNCOMP_DATA:
@@ -2462,8 +2465,12 @@ int deflate_decompress_data(deflate_decompress_ctx *dctx,
#endif
emit_char(dctx, dctx->bits & 0xFF);
EATBITS(8);
- if (--dctx->uncomplen == 0)
- dctx->state = OUTSIDEBLK; /* end of uncompressed block */
+ if (--dctx->uncomplen == 0) { /* end of uncompressed block */
+ if (dctx->lastblock)
+ dctx->state = END;
+ else
+ dctx->state = OUTSIDEBLK;
+ }
break;
case END:
/*