From: simon Date: Thu, 3 May 2012 17:38:08 +0000 (+0000) Subject: Add an error check for correct formatting in Deflate uncompressed X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/halibut/commitdiff_plain/8f664e7e91c918cd13248f6b684580c4dd2cdb31 Add an error check for correct formatting in Deflate uncompressed block headers. (Ubuntu 12.04's gcc spotted that nlen was unused, which it shouldn't have been.) git-svn-id: svn://svn.tartarus.org/sgt/halibut@9475 cda61777-01e9-0310-a592-d414129be87e --- diff --git a/deflate.c b/deflate.c index ecae0d0..a04f86d 100644 --- a/deflate.c +++ b/deflate.c @@ -2441,8 +2441,12 @@ int deflate_decompress_data(deflate_decompress_ctx *dctx, */ if (dctx->nbits < 16) goto finished; - nlen = dctx->bits & 0xFFFF; + nlen = 0xFFFF & ~dctx->bits; EATBITS(16); + if (dctx->uncomplen != (nlen ^ 0xFFFF)) { + error = DEFLATE_ERR_UNCOMP_HDR; + goto finished; + } if (dctx->uncomplen == 0) dctx->state = OUTSIDEBLK; /* block is empty */ else diff --git a/deflate.h b/deflate.h index 80837f9..6f51407 100644 --- a/deflate.h +++ b/deflate.h @@ -150,6 +150,7 @@ int deflate_decompress_data(deflate_decompress_ctx *ctx, A(DEFLATE_ERR_GZIP_FHCRC, "gzip header specifies disputed FHCRC flag"), \ A(DEFLATE_ERR_SMALL_HUFTABLE, "under-committed Huffman code space"), \ A(DEFLATE_ERR_LARGE_HUFTABLE, "over-committed Huffman code space"), \ + A(DEFLATE_ERR_UNCOMP_HDR, "wrongly formatted header in uncompressed block"), \ A(DEFLATE_ERR_CHECKSUM, "incorrect data checksum"), \ A(DEFLATE_ERR_INLEN, "incorrect data length"), \ A(DEFLATE_ERR_UNEXPECTED_EOF, "unexpected end of data")