summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--deflate.c4
-rw-r--r--deflate.h1
2 files changed, 5 insertions, 0 deletions
diff --git a/deflate.c b/deflate.c
index 5eb1faa..7c3f3bc 100644
--- a/deflate.c
+++ b/deflate.c
@@ -2417,6 +2417,10 @@ int deflate_decompress_data(deflate_decompress_ctx *dctx,
debug(("recv: dist %d\n", code));
if (code == -1)
goto finished;
+ if (code >= 30) {
+ error = DEFLATE_ERR_BADDISTCODE;
+ goto finished;
+ }
dctx->state = GOTDISTSYM;
dctx->sym = code;
break;
diff --git a/deflate.h b/deflate.h
index 140626f..fcd2cd1 100644
--- a/deflate.h
+++ b/deflate.h
@@ -152,6 +152,7 @@ int deflate_decompress_data(deflate_decompress_ctx *ctx,
A(DEFLATE_ERR_LARGE_HUFTABLE, "over-committed Huffman code space"), \
A(DEFLATE_ERR_UNCOMP_HDR, "wrongly formatted header in uncompressed block"), \
A(DEFLATE_ERR_NODISTTABLE, "backward copy encoded in block without distances table"), \
+ A(DEFLATE_ERR_BADDISTCODE, "invalid distance code 30 or 31 found in block"), \
A(DEFLATE_ERR_CHECKSUM, "incorrect data checksum"), \
A(DEFLATE_ERR_INLEN, "incorrect data length"), \
A(DEFLATE_ERR_UNEXPECTED_EOF, "unexpected end of data")