#define debug_int(x...) ( fprintf(stderr, x) )
#define debug(x) ( debug_int x )
#else
-#define debug(x)
+#define debug(x) ((void)0)
#endif
#ifdef STANDALONE
unsigned long datasize;
int lastblock;
int finished;
- unsigned char static_len1[286], static_len2[30];
- int static_code1[286], static_code2[30];
+ unsigned char static_len1[288], static_len2[30];
+ int static_code1[288], static_code2[30];
struct huftrees sht;
#ifdef STATISTICS
unsigned long bitcount;
{
int i;
- for (i = 0; i < lenof(out->static_len1); i++)
+ for (i = 0; i < (int)lenof(out->static_len1); i++)
out->static_len1[i] = (i < 144 ? 8 :
i < 256 ? 9 :
i < 280 ? 7 : 8);
- for (i = 0; i < lenof(out->static_len2); i++)
+ for (i = 0; i < (int)lenof(out->static_len2); i++)
out->static_len2[i] = 5;
}
hufcodes(out->static_len1, out->static_code1, lenof(out->static_code1));
{
const coderecord *rec;
const unsigned char *block = (const unsigned char *)vblock;
- int code, bfinal, btype, rep, dist, nlen, header, cksum;
+ int code, bfinal, btype, rep, dist, nlen, header;
+ unsigned long cksum;
int error = 0;
if (len == 0) {
goto finished;
nlen = dctx->bits & 0xFFFF;
EATBITS(16);
- if (dctx->uncomplen == 0)
- dctx->state = OUTSIDEBLK; /* block is empty */
- else
+ if (dctx->uncomplen != (nlen ^ 0xFFFF)) {
+ error = DEFLATE_ERR_UNCOMP_HDR;
+ goto finished;
+ }
+ 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:
#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:
/*