From: Nathan Moinvaziri Date: Mon, 29 May 2023 19:43:58 +0000 (-0700) Subject: Simplify deflate stream/state check. X-Git-Tag: 2.1.4~47 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e9a48a2ecb1c70e014b3a0eb5c6bc612213b2b52;p=thirdparty%2Fzlib-ng.git Simplify deflate stream/state check. --- diff --git a/deflate.c b/deflate.c index 55abcf621..978a389b9 100644 --- a/deflate.c +++ b/deflate.c @@ -340,21 +340,12 @@ int32_t Z_EXPORT PREFIX(deflateInit2_)(PREFIX3(stream) *strm, int32_t level, int /* ========================================================================= * Check for a valid deflate stream state. Return 0 if ok, 1 if not. */ -static int deflateStateCheck (PREFIX3(stream) *strm) { +static int deflateStateCheck(PREFIX3(stream) *strm) { deflate_state *s; if (strm == NULL || strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0) return 1; s = strm->state; - if (s == NULL || s->strm != strm || (s->status != INIT_STATE && -#ifdef GZIP - s->status != GZIP_STATE && - s->status != EXTRA_STATE && - s->status != NAME_STATE && - s->status != COMMENT_STATE && - s->status != HCRC_STATE && -#endif - s->status != BUSY_STATE && - s->status != FINISH_STATE)) + if (s == NULL || s->strm != strm || (s->status < INIT_STATE || s->status > MAX_STATE)) return 1; return 0; } diff --git a/deflate.h b/deflate.h index e4b971f88..8001b47c9 100644 --- a/deflate.h +++ b/deflate.h @@ -51,16 +51,21 @@ #define END_BLOCK 256 /* end of block literal code */ -#define INIT_STATE 42 /* zlib header -> BUSY_STATE */ +#define INIT_STATE 1 /* zlib header -> BUSY_STATE */ #ifdef GZIP -# define GZIP_STATE 57 /* gzip header -> BUSY_STATE | EXTRA_STATE */ -# define EXTRA_STATE 69 /* gzip extra block -> NAME_STATE */ -# define NAME_STATE 73 /* gzip file name -> COMMENT_STATE */ -# define COMMENT_STATE 91 /* gzip comment -> HCRC_STATE */ -# define HCRC_STATE 103 /* gzip header CRC -> BUSY_STATE */ +# define GZIP_STATE 4 /* gzip header -> BUSY_STATE | EXTRA_STATE */ +# define EXTRA_STATE 5 /* gzip extra block -> NAME_STATE */ +# define NAME_STATE 6 /* gzip file name -> COMMENT_STATE */ +# define COMMENT_STATE 7 /* gzip comment -> HCRC_STATE */ +# define HCRC_STATE 8 /* gzip header CRC -> BUSY_STATE */ +#endif +#define BUSY_STATE 2 /* deflate -> FINISH_STATE */ +#define FINISH_STATE 3 /* stream complete */ +#ifdef GZIP +# define MAX_STATE HCRC_STATE +#else +# define MAX_STATE FINISH_STATE #endif -#define BUSY_STATE 113 /* deflate -> FINISH_STATE */ -#define FINISH_STATE 666 /* stream complete */ /* Stream status */ #define HASH_BITS 16u /* log2(HASH_SIZE) */