*/
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