From: Daniel Stenberg Date: Thu, 6 Feb 2025 08:28:42 +0000 (+0100) Subject: content_encoding: #error on too old zlib X-Git-Tag: curl-8_12_1~87 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=34acdf998696dd55af09179e6f5ae2b9f926797e;p=thirdparty%2Fcurl.git content_encoding: #error on too old zlib The previous runtime check using strcmp() risks failing when zlib reaches 1.10. While this instead changes the logic to a cruder build-time instead of runtime, it avoids the 1.10 risk. I verified that ZLIB_VERNUM has been provided since at least the 1.2.0.3 release. 1.2.0.4 was released on 10 August 2003. Reported-by: Fay Stegerman Closes #16202 --- diff --git a/lib/content_encoding.c b/lib/content_encoding.c index d23f8cdb55..e365af6168 100644 --- a/lib/content_encoding.c +++ b/lib/content_encoding.c @@ -69,6 +69,10 @@ #ifdef HAVE_LIBZ +#if !defined(ZLIB_VERNUM) || (ZLIB_VERNUM < 0x1204) +#error "requires zlib 1.2.0.4 or newer" +#endif + typedef enum { ZLIB_UNINIT, /* uninitialized */ ZLIB_INIT, /* initialized */ @@ -309,24 +313,15 @@ static CURLcode gzip_do_init(struct Curl_easy *data, { struct zlib_writer *zp = (struct zlib_writer *) writer; z_stream *z = &zp->z; /* zlib state structure */ - const char *v = zlibVersion(); /* Initialize zlib */ z->zalloc = (alloc_func) zalloc_cb; z->zfree = (free_func) zfree_cb; - if(strcmp(v, "1.2.0.4") >= 0) { - /* zlib version >= 1.2.0.4 supports transparent gzip decompressing */ - if(inflateInit2(z, MAX_WBITS + 32) != Z_OK) { - return process_zlib_error(data, z); - } - zp->zlib_init = ZLIB_INIT_GZIP; /* Transparent gzip decompress state */ - } - else { - failf(data, "too old zlib version: %s", v); - return CURLE_FAILED_INIT; - } + if(inflateInit2(z, MAX_WBITS + 32) != Z_OK) + return process_zlib_error(data, z); + zp->zlib_init = ZLIB_INIT_GZIP; /* Transparent gzip decompress state */ return CURLE_OK; }