summaryrefslogtreecommitdiff
path: root/inflate.c
diff options
context:
space:
mode:
authorHans Kristian Rosbach <hk-git@circlestorm.org>2020-10-18 16:19:51 +0200
committerHans Kristian Rosbach <hk-github@circlestorm.org>2020-10-24 15:51:46 +0200
commit6ce39348ba7b7a554507856232dcb6ed4aba5a20 (patch)
treeb0ad08348e22be86bab81a7f3ccbe3bee6d072be /inflate.c
parentb802a303ce8b6c86fbe3f93d59e0a82333768c0c (diff)
inflate: add SET_BAD macro, to make inflate.c a little cleaner.
Diffstat (limited to 'inflate.c')
-rw-r--r--inflate.c65
1 files changed, 22 insertions, 43 deletions
diff --git a/inflate.c b/inflate.c
index 3d5efbd..faf72ab 100644
--- a/inflate.c
+++ b/inflate.c
@@ -423,13 +423,11 @@ int32_t Z_EXPORT PREFIX(inflate)(PREFIX3(stream) *strm, int32_t flush) {
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);
@@ -437,8 +435,7 @@ int32_t Z_EXPORT PREFIX(inflate)(PREFIX3(stream) *strm, int32_t flush) {
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;
@@ -454,13 +451,11 @@ int32_t Z_EXPORT PREFIX(inflate)(PREFIX3(stream) *strm, int32_t flush) {
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)
@@ -575,8 +570,7 @@ int32_t Z_EXPORT PREFIX(inflate)(PREFIX3(stream) *strm, int32_t flush) {
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();
@@ -637,8 +631,7 @@ int32_t Z_EXPORT PREFIX(inflate)(PREFIX3(stream) *strm, int32_t flush) {
state->mode = TABLE;
break;
case 3:
- strm->msg = (char *)"invalid block type";
- state->mode = BAD;
+ SET_BAD("invalid block type");
}
DROPBITS(2);
break;
@@ -648,8 +641,7 @@ int32_t Z_EXPORT PREFIX(inflate)(PREFIX3(stream) *strm, int32_t flush) {
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;
@@ -692,8 +684,7 @@ int32_t Z_EXPORT PREFIX(inflate)(PREFIX3(stream) *strm, int32_t flush) {
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
@@ -715,8 +706,7 @@ int32_t Z_EXPORT PREFIX(inflate)(PREFIX3(stream) *strm, int32_t flush) {
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"));
@@ -739,8 +729,7 @@ int32_t Z_EXPORT PREFIX(inflate)(PREFIX3(stream) *strm, int32_t flush) {
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];
@@ -760,8 +749,7 @@ int32_t Z_EXPORT PREFIX(inflate)(PREFIX3(stream) *strm, int32_t flush) {
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) {
@@ -777,8 +765,7 @@ int32_t Z_EXPORT PREFIX(inflate)(PREFIX3(stream) *strm, int32_t flush) {
/* 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;
}
@@ -790,8 +777,7 @@ int32_t Z_EXPORT PREFIX(inflate)(PREFIX3(stream) *strm, int32_t flush) {
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);
@@ -799,8 +785,7 @@ int32_t Z_EXPORT PREFIX(inflate)(PREFIX3(stream) *strm, int32_t flush) {
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"));
@@ -865,8 +850,7 @@ int32_t Z_EXPORT PREFIX(inflate)(PREFIX3(stream) *strm, int32_t flush) {
/* invalid code */
if (here.op & 64) {
- strm->msg = (char *)"invalid literal/length code";
- state->mode = BAD;
+ SET_BAD("invalid literal/length code");
break;
}
@@ -908,8 +892,7 @@ int32_t Z_EXPORT PREFIX(inflate)(PREFIX3(stream) *strm, int32_t flush) {
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;
@@ -926,8 +909,7 @@ int32_t Z_EXPORT PREFIX(inflate)(PREFIX3(stream) *strm, int32_t flush) {
}
#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
@@ -942,8 +924,7 @@ int32_t Z_EXPORT PREFIX(inflate)(PREFIX3(stream) *strm, int32_t flush) {
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
@@ -1010,8 +991,7 @@ int32_t Z_EXPORT PREFIX(inflate)(PREFIX3(stream) *strm, int32_t flush) {
state->flags ? hold :
#endif
ZSWAP32(hold)) != state->check) {
- strm->msg = (char *)"incorrect data check";
- state->mode = BAD;
+ SET_BAD("incorrect data check");
break;
}
INITBITS();
@@ -1024,8 +1004,7 @@ int32_t Z_EXPORT PREFIX(inflate)(PREFIX3(stream) *strm, int32_t flush) {
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();
@@ -1340,7 +1319,7 @@ long Z_EXPORT PREFIX(inflateMark)(PREFIX3(stream) *strm) {
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));
}