break;
case 3:
strm->msg = "invalid block type";
- state->mode = BAD;
+ state->mode = BAD_DATA;
}
DROPBITS(2);
break;
NEEDBITS(32);
if ((hold & 0xffff) != ((hold >> 16) ^ 0xffff)) {
strm->msg = "invalid stored block lengths";
- state->mode = BAD;
+ state->mode = BAD_DATA;
break;
}
state->length = (unsigned)hold & 0xffff;
#ifndef PKZIP_BUG_WORKAROUND
if (state->nlen > 286 || state->ndist > 30) {
strm->msg = "too many length or distance symbols";
- state->mode = BAD;
+ state->mode = BAD_DATA;
break;
}
#endif
&(state->lenbits), state->work);
if (ret) {
strm->msg = "invalid code lengths set";
- state->mode = BAD;
+ state->mode = BAD_DATA;
break;
}
Tracev((stderr, "inflate: code lengths ok\n"));
DROPBITS(this.bits);
if (state->have == 0) {
strm->msg = "invalid bit length repeat";
- state->mode = BAD;
+ state->mode = BAD_DATA;
break;
}
len = (unsigned)(state->lens[state->have - 1]);
}
if (state->have + copy > state->nlen + state->ndist) {
strm->msg = "invalid bit length repeat";
- state->mode = BAD;
+ state->mode = BAD_DATA;
break;
}
while (copy--)
}
/* handle error breaks in while */
- if (state->mode == BAD) break;
+ if (state->mode == BAD_DATA) break;
/* build code tables */
state->next = state->codes;
&(state->lenbits), state->work);
if (ret) {
strm->msg = "invalid literal/lengths set";
- state->mode = BAD;
+ state->mode = BAD_DATA;
break;
}
state->distcode = (code const FAR *)(state->next);
&(state->next), &(state->distbits), state->work);
if (ret) {
strm->msg = "invalid distances set";
- state->mode = BAD;
+ state->mode = BAD_DATA;
break;
}
Tracev((stderr, "inflate: codes ok\n"));
/* invalid code */
if (this.op & 64) {
strm->msg = "invalid literal/length code";
- state->mode = BAD;
+ state->mode = BAD_DATA;
break;
}
DROPBITS(this.bits);
if (this.op & 64) {
strm->msg = "invalid distance code";
- state->mode = BAD;
+ state->mode = BAD_DATA;
break;
}
state->offset = (unsigned)this.val;
if (state->offset > state->wsize - (state->whave < state->wsize ?
left : 0)) {
strm->msg = "invalid distance too far back";
- state->mode = BAD;
+ state->mode = BAD_DATA;
break;
}
Tracevv((stderr, "inflate: distance %u\n", state->offset));
}
goto inf_leave;
- case BAD:
+ case BAD_DATA:
ret = Z_DATA_ERROR;
goto inf_leave;
LEN -- ran out of enough output space or enough available input
TYPE -- reached end of block code, inflate() to interpret next block
- BAD -- error in block data
+ BAD_DATA -- error in block data
Notes:
#ifdef INFLATE_STRICT
if (dist > dmax) {
strm->msg = (char *)"invalid distance too far back";
- state->mode = BAD;
+ state->mode = BAD_DATA;
break;
}
#endif
op = dist - op; /* distance back in window */
if (op > whave) {
strm->msg = "invalid distance too far back";
- state->mode = BAD;
+ state->mode = BAD_DATA;
break;
}
from = window - OFF;
}
else {
strm->msg = "invalid distance code";
- state->mode = BAD;
+ state->mode = BAD_DATA;
break;
}
}
}
else {
strm->msg = "invalid literal/length code";
- state->mode = BAD;
+ state->mode = BAD_DATA;
break;
}
} while (in < last && out < end);
#endif
((BITS(8) << 8) + (hold >> 8)) % 31) {
strm->msg = "incorrect header check";
- state->mode = BAD;
+ state->mode = BAD_DATA;
break;
}
if (BITS(4) != Z_DEFLATED) {
strm->msg = "unknown compression method";
- state->mode = BAD;
+ state->mode = BAD_DATA;
break;
}
DROPBITS(4);
len = BITS(4) + 8;
if (len > state->wbits) {
strm->msg = "invalid window size";
- state->mode = BAD;
+ state->mode = BAD_DATA;
break;
}
state->dmax = 1U << len;
state->flags = (int)(hold);
if ((state->flags & 0xff) != Z_DEFLATED) {
strm->msg = "unknown compression method";
- state->mode = BAD;
+ state->mode = BAD_DATA;
break;
}
if (state->flags & 0xe000) {
strm->msg = "unknown header flags set";
- state->mode = BAD;
+ state->mode = BAD_DATA;
break;
}
if (state->head != Z_NULL)
NEEDBITS(16);
if (hold != (state->check & 0xffff)) {
strm->msg = "header crc mismatch";
- state->mode = BAD;
+ state->mode = BAD_DATA;
break;
}
INITBITS();
break;
case 3:
strm->msg = "invalid block type";
- state->mode = BAD;
+ state->mode = BAD_DATA;
}
DROPBITS(2);
break;
NEEDBITS(32);
if ((hold & 0xffff) != ((hold >> 16) ^ 0xffff)) {
strm->msg = "invalid stored block lengths";
- state->mode = BAD;
+ state->mode = BAD_DATA;
break;
}
state->length = (unsigned)hold & 0xffff;
#ifndef PKZIP_BUG_WORKAROUND
if (state->nlen > 286 || state->ndist > 30) {
strm->msg = "too many length or distance symbols";
- state->mode = BAD;
+ state->mode = BAD_DATA;
break;
}
#endif
&(state->lenbits), state->work);
if (ret) {
strm->msg = "invalid code lengths set";
- state->mode = BAD;
+ state->mode = BAD_DATA;
break;
}
Tracev((stderr, "inflate: code lengths ok\n"));
DROPBITS(this.bits);
if (state->have == 0) {
strm->msg = "invalid bit length repeat";
- state->mode = BAD;
+ state->mode = BAD_DATA;
break;
}
len = state->lens[state->have - 1];
}
if (state->have + copy > state->nlen + state->ndist) {
strm->msg = "invalid bit length repeat";
- state->mode = BAD;
+ state->mode = BAD_DATA;
break;
}
while (copy--)
}
/* handle error breaks in while */
- if (state->mode == BAD) break;
+ if (state->mode == BAD_DATA) break;
/* build code tables */
state->next = state->codes;
&(state->lenbits), state->work);
if (ret) {
strm->msg = "invalid literal/lengths set";
- state->mode = BAD;
+ state->mode = BAD_DATA;
break;
}
state->distcode = (code const FAR *)(state->next);
&(state->next), &(state->distbits), state->work);
if (ret) {
strm->msg = "invalid distances set";
- state->mode = BAD;
+ state->mode = BAD_DATA;
break;
}
Tracev((stderr, "inflate: codes ok\n"));
}
if (this.op & 64) {
strm->msg = "invalid literal/length code";
- state->mode = BAD;
+ state->mode = BAD_DATA;
break;
}
state->extra = (unsigned)(this.op) & 15;
DROPBITS(this.bits);
if (this.op & 64) {
strm->msg = "invalid distance code";
- state->mode = BAD;
+ state->mode = BAD_DATA;
break;
}
state->offset = (unsigned)this.val;
#ifdef INFLATE_STRICT
if (state->offset > state->dmax) {
strm->msg = "invalid distance too far back";
- state->mode = BAD;
+ state->mode = BAD_DATA;
break;
}
#endif
if (state->offset > state->whave + out - left) {
strm->msg = "invalid distance too far back";
- state->mode = BAD;
+ state->mode = BAD_DATA;
break;
}
Tracevv((stderr, "inflate: distance %u\n", state->offset));
#endif
REVERSE(hold)) != state->check) {
strm->msg = "incorrect data check";
- state->mode = BAD;
+ state->mode = BAD_DATA;
break;
}
INITBITS();
NEEDBITS(32);
if (hold != (state->total & 0xffffffffUL)) {
strm->msg = "incorrect length check";
- state->mode = BAD;
+ state->mode = BAD_DATA;
break;
}
INITBITS();
case DONE:
ret = Z_STREAM_END;
goto inf_leave;
- case BAD:
+ case BAD_DATA:
ret = Z_DATA_ERROR;
goto inf_leave;
case MEM:
CHECK, /* i: waiting for 32-bit check value */
LENGTH, /* i: waiting for 32-bit length (gzip) */
DONE, /* finished check, done -- remain here until reset */
- BAD, /* got a data error -- remain here until reset */
+ BAD_DATA, /* got a data error -- remain here until reset */
MEM, /* got an inflate() memory error -- remain here until reset */
SYNC /* looking for synchronization bytes to restart inflate() */
} inflate_mode;
/*
State transitions between above modes -
- (most modes can go to the BAD or MEM mode -- not shown for clarity)
+ (most modes can go to the BAD_DATA or MEM mode -- not shown for clarity)
Process header:
HEAD -> (gzip) or (zlib)