From 1614151ae64fa91312f1fd5f9a29476f14a084de Mon Sep 17 00:00:00 2001 From: Marc Bennewitz Date: Tue, 8 Jul 2025 14:06:32 +0200 Subject: [PATCH] Better size check in bzdecompress --- ext/bz2/bz2.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/ext/bz2/bz2.c b/ext/bz2/bz2.c index 9ed5342a7df8f..c412a241e0aca 100644 --- a/ext/bz2/bz2.c +++ b/ext/bz2/bz2.c @@ -493,11 +493,7 @@ PHP_FUNCTION(bzdecompress) size_t source_len; int error; bool small = 0; -#ifdef PHP_WIN32 - unsigned __int64 size = 0; -#else unsigned long long size = 0; -#endif bz_stream bzs; if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS(), "s|b", &source, &source_len, &small)) { @@ -524,7 +520,7 @@ PHP_FUNCTION(bzdecompress) /* compression is better then 2:1, need to allocate more memory */ bzs.avail_out = source_len; size = (bzs.total_out_hi32 * (unsigned int) -1) + bzs.total_out_lo32; -#ifndef ZEND_ENABLE_ZVAL_LONG64 +#if SIZEOF_LONG_LONG > SIZEOF_SIZE_T if (size > SIZE_MAX) { /* no reason to continue if we're going to drop it anyway */ break; @@ -536,9 +532,9 @@ PHP_FUNCTION(bzdecompress) if (error == BZ_STREAM_END || error == BZ_OK) { size = (bzs.total_out_hi32 * (unsigned int) -1) + bzs.total_out_lo32; -#ifndef ZEND_ENABLE_ZVAL_LONG64 +#if SIZEOF_LONG_LONG > SIZEOF_SIZE_T if (UNEXPECTED(size > SIZE_MAX)) { - php_error_docref(NULL, E_WARNING, "Decompressed size too big, max is %zd", SIZE_MAX); + php_error_docref(NULL, E_WARNING, "Decompressed size too big, max is %zu", SIZE_MAX); zend_string_efree(dest); RETVAL_LONG(BZ_MEM_ERROR); } else