if (
#endif
((BITS(8) << 8) + (hold >> 8)) % 31) {
- strm->msg = (char *)"incorrect header check";
- state->mode = BAD;
+ SET_BAD("incorrect header check");
break;
}
if (BITS(4) != Z_DEFLATED) {
- strm->msg = (char *)"unknown compression method";
- state->mode = BAD;
+ SET_BAD("unknown compression method");
break;
}
DROPBITS(4);
if (state->wbits == 0)
state->wbits = len;
if (len > 15 || len > state->wbits) {
- strm->msg = (char *)"invalid window size";
- state->mode = BAD;
+ SET_BAD("invalid window size");
break;
}
state->dmax = 1U << len;
NEEDBITS(16);
state->flags = (int)(hold);
if ((state->flags & 0xff) != Z_DEFLATED) {
- strm->msg = (char *)"unknown compression method";
- state->mode = BAD;
+ SET_BAD("unknown compression method");
break;
}
if (state->flags & 0xe000) {
- strm->msg = (char *)"unknown header flags set";
- state->mode = BAD;
+ SET_BAD("unknown header flags set");
break;
}
if (state->head != NULL)
if (state->flags & 0x0200) {
NEEDBITS(16);
if ((state->wrap & 4) && hold != (state->check & 0xffff)) {
- strm->msg = (char *)"header crc mismatch";
- state->mode = BAD;
+ SET_BAD("header crc mismatch");
break;
}
INITBITS();
state->mode = TABLE;
break;
case 3:
- strm->msg = (char *)"invalid block type";
- state->mode = BAD;
+ SET_BAD("invalid block type");
}
DROPBITS(2);
break;
BYTEBITS(); /* go to byte boundary */
NEEDBITS(32);
if ((hold & 0xffff) != ((hold >> 16) ^ 0xffff)) {
- strm->msg = (char *)"invalid stored block lengths";
- state->mode = BAD;
+ SET_BAD("invalid stored block lengths");
break;
}
state->length = (uint16_t)hold;
DROPBITS(4);
#ifndef PKZIP_BUG_WORKAROUND
if (state->nlen > 286 || state->ndist > 30) {
- strm->msg = (char *)"too many length or distance symbols";
- state->mode = BAD;
+ SET_BAD("too many length or distance symbols");
break;
}
#endif
state->lenbits = 7;
ret = zng_inflate_table(CODES, state->lens, 19, &(state->next), &(state->lenbits), state->work);
if (ret) {
- strm->msg = (char *)"invalid code lengths set";
- state->mode = BAD;
+ SET_BAD("invalid code lengths set");
break;
}
Tracev((stderr, "inflate: code lengths ok\n"));
NEEDBITS(here.bits + 2);
DROPBITS(here.bits);
if (state->have == 0) {
- strm->msg = (char *)"invalid bit length repeat";
- state->mode = BAD;
+ SET_BAD("invalid bit length repeat");
break;
}
len = state->lens[state->have - 1];
DROPBITS(7);
}
if (state->have + copy > state->nlen + state->ndist) {
- strm->msg = (char *)"invalid bit length repeat";
- state->mode = BAD;
+ SET_BAD("invalid bit length repeat");
break;
}
while (copy) {
/* check for end-of-block code (better have one) */
if (state->lens[256] == 0) {
- strm->msg = (char *)"invalid code -- missing end-of-block";
- state->mode = BAD;
+ SET_BAD("invalid code -- missing end-of-block");
break;
}
state->lenbits = 9;
ret = zng_inflate_table(LENS, state->lens, state->nlen, &(state->next), &(state->lenbits), state->work);
if (ret) {
- strm->msg = (char *)"invalid literal/lengths set";
- state->mode = BAD;
+ SET_BAD("invalid literal/lengths set");
break;
}
state->distcode = (const code *)(state->next);
ret = zng_inflate_table(DISTS, state->lens + state->nlen, state->ndist,
&(state->next), &(state->distbits), state->work);
if (ret) {
- strm->msg = (char *)"invalid distances set";
- state->mode = BAD;
+ SET_BAD("invalid distances set");
break;
}
Tracev((stderr, "inflate: codes ok\n"));
/* invalid code */
if (here.op & 64) {
- strm->msg = (char *)"invalid literal/length code";
- state->mode = BAD;
+ SET_BAD("invalid literal/length code");
break;
}
DROPBITS(here.bits);
state->back += here.bits;
if (here.op & 64) {
- strm->msg = (char *)"invalid distance code";
- state->mode = BAD;
+ SET_BAD("invalid distance code");
break;
}
state->offset = here.val;
}
#ifdef INFLATE_STRICT
if (state->offset > state->dmax) {
- strm->msg = (char *)"invalid distance too far back";
- state->mode = BAD;
+ SET_BAD("invalid distance too far back");
break;
}
#endif
copy = state->offset - copy;
if (copy > state->whave) {
if (state->sane) {
- strm->msg = (char *)"invalid distance too far back";
- state->mode = BAD;
+ SET_BAD("invalid distance too far back");
break;
}
#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
state->flags ? hold :
#endif
ZSWAP32(hold)) != state->check) {
- strm->msg = (char *)"incorrect data check";
- state->mode = BAD;
+ SET_BAD("incorrect data check");
break;
}
INITBITS();
if (state->wrap && state->flags) {
NEEDBITS(32);
if ((state->wrap & 4) && hold != (state->total & 0xffffffff)) {
- strm->msg = (char *)"incorrect length check";
- state->mode = BAD;
+ SET_BAD("incorrect length check");
break;
}
INITBITS();
return -65536;
INFLATE_MARK_HOOK(strm); /* hook for IBM Z DFLTCC */
state = (struct inflate_state *)strm->state;
- return (long)(((unsigned long)((long)state->back)) << 16) +
+ return (long)(((unsigned long)((long)state->back)) << 16) +
(state->mode == COPY ? state->length :
(state->mode == MATCH ? state->was - state->length : 0));
}