From 928afd8fb7228131356133546db1b704e035b998 Mon Sep 17 00:00:00 2001 From: George Peter Banyard Date: Sun, 8 Dec 2019 14:15:27 +0100 Subject: [PATCH] Convert some warnings to Error in zlib extension Closes GH-4985 --- ext/zlib/tests/005.phpt | 30 +++++---- ext/zlib/tests/006.phpt | 23 ++++--- ext/zlib/tests/007.phpt | 41 +++++++----- ext/zlib/tests/deflate_add_error.phpt | 24 ++++--- ext/zlib/tests/deflate_init_error.phpt | 57 ++++++++++------ ext/zlib/tests/gzcompress_error1.phpt | 22 ++++--- ext/zlib/tests/gzdeflate_error1.phpt | 22 ++++--- ext/zlib/tests/gzencode_error1.phpt | 22 ++++--- ext/zlib/tests/inflate_add_error.phpt | 24 ++++--- ext/zlib/tests/inflate_init_error.phpt | 13 ++-- ext/zlib/zlib.c | 91 ++++++++++++-------------- ext/zlib/zlib.stub.php | 4 +- ext/zlib/zlib_arginfo.h | 2 +- 13 files changed, 220 insertions(+), 155 deletions(-) diff --git a/ext/zlib/tests/005.phpt b/ext/zlib/tests/005.phpt index cf93859d446..da81c48c730 100644 --- a/ext/zlib/tests/005.phpt +++ b/ext/zlib/tests/005.phpt @@ -5,9 +5,13 @@ gzcompress()/gzuncompress() and invalid params --FILE-- getMessage() . \PHP_EOL; +} +var_dump(gzcompress("", -1)); var_dump(gzcompress("")); var_dump(gzcompress("", 9)); @@ -18,8 +22,17 @@ Desolation, grief and agony"; var_dump($data1 = gzcompress($string)); var_dump($data2 = gzcompress($string, 9)); -var_dump(gzuncompress("", 1000)); -var_dump(gzuncompress("", -1)); +try { + var_dump(gzuncompress("", 1000)); +} catch (\ValueError $e) { + echo $e->getMessage() . \PHP_EOL; +} + +try { + var_dump(gzuncompress("", -1)); +} catch (\ValueError $e) { + echo $e->getMessage() . \PHP_EOL; +} var_dump(gzuncompress("")); var_dump(gzuncompress("", 9)); @@ -29,11 +42,9 @@ var_dump(gzuncompress($data2)); $data2[4] = 0; var_dump(gzuncompress($data2)); -echo "Done\n"; ?> --EXPECTF-- -Warning: gzcompress(): compression level (1000) must be within -1..9 in %s on line %d -bool(false) +Compression level (1000) must be within -1..9 string(%d) "%a" string(%d) "%a" string(%d) "%a" @@ -42,9 +53,7 @@ string(%d) "%a" Warning: gzuncompress(): %s error in %s on line %d bool(false) - -Warning: gzuncompress(): length (-1) must be greater or equal zero in %s on line %d -bool(false) +Length (-1) must be greater or equal zero Warning: gzuncompress(): %s error in %s on line %d bool(false) @@ -60,4 +69,3 @@ Desolation, grief and agony" Warning: gzuncompress(): %s error in %s on line %d bool(false) -Done diff --git a/ext/zlib/tests/006.phpt b/ext/zlib/tests/006.phpt index ad1eb25f12e..32965ea65a5 100644 --- a/ext/zlib/tests/006.phpt +++ b/ext/zlib/tests/006.phpt @@ -5,7 +5,12 @@ gzdeflate()/gzinflate() and invalid params --FILE-- getMessage() . \PHP_EOL; +} + var_dump(gzdeflate("", -1)); var_dump(gzdeflate("")); @@ -20,7 +25,12 @@ var_dump($data2 = gzdeflate($string, 9)); var_dump(gzinflate("")); var_dump(gzinflate("asfwe", 1000)); -var_dump(gzinflate("asdf", -1)); + +try { + var_dump(gzinflate("asdf", -1)); +} catch (\ValueError $e) { + echo $e->getMessage() . \PHP_EOL; +} var_dump(gzinflate("asdf")); var_dump(gzinflate("asdf", 9)); @@ -30,11 +40,9 @@ var_dump(gzinflate($data2)); $data2[4] = 0; var_dump(gzinflate($data2)); -echo "Done\n"; ?> --EXPECTF-- -Warning: gzdeflate(): compression level (1000) must be within -1..9 in %s on line %d -bool(false) +Compression level (1000) must be within -1..9 string(%d) "%a" string(%d) "%a" string(%d) "%a" @@ -46,9 +54,7 @@ bool(false) Warning: gzinflate(): data error in %s on line %d bool(false) - -Warning: gzinflate(): length (-1) must be greater or equal zero in %s on line %d -bool(false) +Length (-1) must be greater or equal zero Warning: gzinflate(): data error in %s on line %d bool(false) @@ -64,4 +70,3 @@ Desolation, grief and agony" Warning: gzinflate(): data error in %s on line %d bool(false) -Done diff --git a/ext/zlib/tests/007.phpt b/ext/zlib/tests/007.phpt index 6028104b9ad..f51d0d3fc59 100644 --- a/ext/zlib/tests/007.phpt +++ b/ext/zlib/tests/007.phpt @@ -5,9 +5,21 @@ gzencode() and invalid params --FILE-- getMessage() . \PHP_EOL; +} +try { + var_dump(gzencode("", 100)); +} catch (\ValueError $e) { + echo $e->getMessage() . \PHP_EOL; +} +try { + var_dump(gzencode("", 1, 100)); +} catch (\ValueError $e) { + echo $e->getMessage() . \PHP_EOL; +} var_dump(gzencode("", -1, ZLIB_ENCODING_GZIP)); var_dump(gzencode("", 9, ZLIB_ENCODING_DEFLATE)); @@ -17,27 +29,22 @@ Light in this temple Light in my truth Lies in the darkness"; -var_dump(gzencode($string, 9, 3)); +try { + var_dump(gzencode($string, 9, 3)); +} catch (\ValueError $e) { + echo $e->getMessage() . \PHP_EOL; +} var_dump(gzencode($string, -1, ZLIB_ENCODING_GZIP)); var_dump(gzencode($string, 9, ZLIB_ENCODING_DEFLATE)); -echo "Done\n"; ?> --EXPECTF-- -Warning: gzencode(): compression level (-10) must be within -1..9 in %s on line %d -bool(false) - -Warning: gzencode(): compression level (100) must be within -1..9 in %s on line %d -bool(false) - -Warning: gzencode(): encoding mode must be either ZLIB_ENCODING_RAW, ZLIB_ENCODING_GZIP or ZLIB_ENCODING_DEFLATE in %s on line %d -bool(false) +Compression level (-10) must be within -1..9 +Compression level (100) must be within -1..9 +Encoding mode must be either ZLIB_ENCODING_RAW, ZLIB_ENCODING_GZIP or ZLIB_ENCODING_DEFLATE string(%d) "%a" string(%d) "%a" - -Warning: gzencode(): encoding mode must be either ZLIB_ENCODING_RAW, ZLIB_ENCODING_GZIP or ZLIB_ENCODING_DEFLATE in %s on line %d -bool(false) +Encoding mode must be either ZLIB_ENCODING_RAW, ZLIB_ENCODING_GZIP or ZLIB_ENCODING_DEFLATE string(%d) "%a" string(%d) "%a" -Done diff --git a/ext/zlib/tests/deflate_add_error.phpt b/ext/zlib/tests/deflate_add_error.phpt index 060a0057797..b2b7d7917c0 100644 --- a/ext/zlib/tests/deflate_add_error.phpt +++ b/ext/zlib/tests/deflate_add_error.phpt @@ -9,15 +9,23 @@ if (!extension_loaded("zlib")) { --FILE-- getMessage() . \PHP_EOL; +} $resource = deflate_init(ZLIB_ENCODING_DEFLATE); $badFlushType = 6789; -var_dump(deflate_add($resource, "test", $badFlushType)); -?> ---EXPECTF-- -Warning: deflate_add(): Invalid deflate resource in %s on line %d -bool(false) -Warning: deflate_add(): flush mode must be ZLIB_NO_FLUSH, ZLIB_PARTIAL_FLUSH, ZLIB_SYNC_FLUSH, ZLIB_FULL_FLUSH, ZLIB_BLOCK or ZLIB_FINISH in %s on line %d -bool(false) +try { + var_dump(deflate_add($resource, "test", $badFlushType)); +} catch (\ValueError $e) { + echo $e->getMessage() . \PHP_EOL; +} + +?> +--EXPECT-- +deflate_add(): supplied resource is not a valid zlib deflate resource +Flush mode must be ZLIB_NO_FLUSH, ZLIB_PARTIAL_FLUSH, ZLIB_SYNC_FLUSH, ZLIB_FULL_FLUSH, ZLIB_BLOCK or ZLIB_FINISH diff --git a/ext/zlib/tests/deflate_init_error.phpt b/ext/zlib/tests/deflate_init_error.phpt index 340a3f1062e..be3f0974d65 100644 --- a/ext/zlib/tests/deflate_init_error.phpt +++ b/ext/zlib/tests/deflate_init_error.phpt @@ -8,24 +8,41 @@ if (!extension_loaded("zlib")) { ?> --FILE-- 42])); -var_dump(deflate_init(ZLIB_ENCODING_DEFLATE, ['level' => -2])); -var_dump(deflate_init(ZLIB_ENCODING_DEFLATE, ['memory' => 0])); -var_dump(deflate_init(ZLIB_ENCODING_DEFLATE, ['memory' => 10])); + +try { + var_dump(deflate_init(42)); +} catch (\ValueError $e) { + echo $e->getMessage() . \PHP_EOL; +} + +try { + var_dump(deflate_init(ZLIB_ENCODING_DEFLATE, ['level' => 42])); +} catch (\ValueError $e) { + echo $e->getMessage() . \PHP_EOL; +} + +try { + var_dump(deflate_init(ZLIB_ENCODING_DEFLATE, ['level' => -2])); +} catch (\ValueError $e) { + echo $e->getMessage() . \PHP_EOL; +} + +try { + var_dump(deflate_init(ZLIB_ENCODING_DEFLATE, ['memory' => 0])); +} catch (\ValueError $e) { + echo $e->getMessage() . \PHP_EOL; +} + +try { + var_dump(deflate_init(ZLIB_ENCODING_DEFLATE, ['memory' => 10])); +} catch (\ValueError $e) { + echo $e->getMessage() . \PHP_EOL; +} + ?> ---EXPECTF-- -Warning: deflate_init(): encoding mode must be ZLIB_ENCODING_RAW, ZLIB_ENCODING_GZIP or ZLIB_ENCODING_DEFLATE in %s on line %d -bool(false) - -Warning: deflate_init(): compression level (42) must be within -1..9 in %s on line %d -bool(false) - -Warning: deflate_init(): compression level (-2) must be within -1..9 in %s on line %d -bool(false) - -Warning: deflate_init(): compression memory level (0) must be within 1..9 in %s on line %d -bool(false) - -Warning: deflate_init(): compression memory level (10) must be within 1..9 in %s on line %d -bool(false) +--EXPECT-- +Encoding mode must be ZLIB_ENCODING_RAW, ZLIB_ENCODING_GZIP or ZLIB_ENCODING_DEFLATE +Compression level (42) must be within -1..9 +Compression level (-2) must be within -1..9 +Compression memory level (0) must be within 1..9 +Compression memory level (10) must be within 1..9 diff --git a/ext/zlib/tests/gzcompress_error1.phpt b/ext/zlib/tests/gzcompress_error1.phpt index 1e514b8db58..81fe35b27d2 100644 --- a/ext/zlib/tests/gzcompress_error1.phpt +++ b/ext/zlib/tests/gzcompress_error1.phpt @@ -23,24 +23,28 @@ echo "*** Testing gzcompress() : error conditions ***\n"; echo "\n-- Testing with incorrect compression level --\n"; $data = 'string_val'; $bad_level = 99; -var_dump(gzcompress($data, $bad_level)); +try { + var_dump(gzcompress($data, $bad_level)); +} catch (\ValueError $e) { + echo $e->getMessage() . \PHP_EOL; +} echo "\n-- Testing with invalid encoding --\n"; $data = 'string_val'; $level = 2; $encoding = 99; -var_dump(gzcompress($data, $level, $encoding)); +try { + var_dump(gzcompress($data, $level, $encoding)); +} catch (\ValueError $e) { + echo $e->getMessage() . \PHP_EOL; +} ?> ---EXPECTF-- +--EXPECT-- *** Testing gzcompress() : error conditions *** -- Testing with incorrect compression level -- - -Warning: gzcompress(): compression level (99) must be within -1..9 in %s on line %d -bool(false) +Compression level (99) must be within -1..9 -- Testing with invalid encoding -- - -Warning: gzcompress(): encoding mode must be either ZLIB_ENCODING_RAW, ZLIB_ENCODING_GZIP or ZLIB_ENCODING_DEFLATE in %s on line %d -bool(false) +Encoding mode must be either ZLIB_ENCODING_RAW, ZLIB_ENCODING_GZIP or ZLIB_ENCODING_DEFLATE diff --git a/ext/zlib/tests/gzdeflate_error1.phpt b/ext/zlib/tests/gzdeflate_error1.phpt index e4d42902bd3..9cee96259e3 100644 --- a/ext/zlib/tests/gzdeflate_error1.phpt +++ b/ext/zlib/tests/gzdeflate_error1.phpt @@ -24,23 +24,27 @@ $data = 'string_val'; echo "\n-- Testing with incorrect compression level --\n"; $bad_level = 99; -var_dump(gzdeflate($data, $bad_level)); +try { + var_dump(gzdeflate($data, $bad_level)); +} catch (\ValueError $e) { + echo $e->getMessage() . \PHP_EOL; +} echo "\n-- Testing with incorrect encoding --\n"; $level = 2; $bad_encoding = 99; -var_dump(gzdeflate($data, $level, $bad_encoding)); +try { + var_dump(gzdeflate($data, $level, $bad_encoding)); +} catch (\ValueError $e) { + echo $e->getMessage() . \PHP_EOL; +} ?> ---EXPECTF-- +--EXPECT-- *** Testing gzdeflate() : error conditions *** -- Testing with incorrect compression level -- - -Warning: gzdeflate(): compression level (99) must be within -1..9 in %s on line %d -bool(false) +Compression level (99) must be within -1..9 -- Testing with incorrect encoding -- - -Warning: gzdeflate(): encoding mode must be either ZLIB_ENCODING_RAW, ZLIB_ENCODING_GZIP or ZLIB_ENCODING_DEFLATE in %s on line %d -bool(false) +Encoding mode must be either ZLIB_ENCODING_RAW, ZLIB_ENCODING_GZIP or ZLIB_ENCODING_DEFLATE diff --git a/ext/zlib/tests/gzencode_error1.phpt b/ext/zlib/tests/gzencode_error1.phpt index a439bb5f347..6c0974a6f65 100644 --- a/ext/zlib/tests/gzencode_error1.phpt +++ b/ext/zlib/tests/gzencode_error1.phpt @@ -26,22 +26,26 @@ $encoding_mode = FORCE_DEFLATE; echo "\n-- Testing with incorrect compression level --\n"; $bad_level = 99; -var_dump(gzencode($data, $bad_level)); +try { + var_dump(gzencode($data, $bad_level)); +} catch (\ValueError $e) { + echo $e->getMessage() . \PHP_EOL; +} echo "\n-- Testing with incorrect encoding_mode --\n"; $bad_mode = 99; -var_dump(gzencode($data, $level, $bad_mode)); +try { + var_dump(gzencode($data, $level, $bad_mode)); +} catch (\ValueError $e) { + echo $e->getMessage() . \PHP_EOL; +} ?> ---EXPECTF-- +--EXPECT-- *** Testing gzencode() : error conditions *** -- Testing with incorrect compression level -- - -Warning: gzencode(): compression level (99) must be within -1..9 in %s on line %d -bool(false) +Compression level (99) must be within -1..9 -- Testing with incorrect encoding_mode -- - -Warning: gzencode(): encoding mode must be either ZLIB_ENCODING_RAW, ZLIB_ENCODING_GZIP or ZLIB_ENCODING_DEFLATE in %s on line %d -bool(false) +Encoding mode must be either ZLIB_ENCODING_RAW, ZLIB_ENCODING_GZIP or ZLIB_ENCODING_DEFLATE diff --git a/ext/zlib/tests/inflate_add_error.phpt b/ext/zlib/tests/inflate_add_error.phpt index 3bc04a0b7c7..9622e5a4c40 100644 --- a/ext/zlib/tests/inflate_add_error.phpt +++ b/ext/zlib/tests/inflate_add_error.phpt @@ -8,15 +8,23 @@ if (!extension_loaded("zlib")) { ?> --FILE-- getMessage() . \PHP_EOL; +} + $resource = inflate_init(ZLIB_ENCODING_DEFLATE); $badFlushType = 6789; -var_dump(inflate_add($resource, "test", $badFlushType)); -?> ---EXPECTF-- -Warning: inflate_add(): Invalid zlib.inflate resource in %s on line %d -bool(false) +try { + var_dump(inflate_add($resource, "test", $badFlushType)); +} catch (\ValueError $e) { + echo $e->getMessage() . \PHP_EOL; +} -Warning: inflate_add(): flush mode must be ZLIB_NO_FLUSH, ZLIB_PARTIAL_FLUSH, ZLIB_SYNC_FLUSH, ZLIB_FULL_FLUSH, ZLIB_BLOCK or ZLIB_FINISH in %s on line %d -bool(false) +?> +--EXPECT-- +inflate_add(): supplied resource is not a valid zlib inflate resource +Flush mode must be ZLIB_NO_FLUSH, ZLIB_PARTIAL_FLUSH, ZLIB_SYNC_FLUSH, ZLIB_FULL_FLUSH, ZLIB_BLOCK or ZLIB_FINISH diff --git a/ext/zlib/tests/inflate_init_error.phpt b/ext/zlib/tests/inflate_init_error.phpt index 504f795aec6..1aae9b792bf 100644 --- a/ext/zlib/tests/inflate_init_error.phpt +++ b/ext/zlib/tests/inflate_init_error.phpt @@ -8,8 +8,13 @@ if (!extension_loaded("zlib")) { ?> --FILE-- getMessage() . \PHP_EOL; +} + ?> ---EXPECTF-- -Warning: inflate_init(): encoding mode must be ZLIB_ENCODING_RAW, ZLIB_ENCODING_GZIP or ZLIB_ENCODING_DEFLATE in %s on line %d -bool(false) +--EXPECT-- +Encoding mode must be ZLIB_ENCODING_RAW, ZLIB_ENCODING_GZIP or ZLIB_ENCODING_DEFLATE diff --git a/ext/zlib/zlib.c b/ext/zlib/zlib.c index 60824a052c7..e4f7c14b233 100644 --- a/ext/zlib/zlib.c +++ b/ext/zlib/zlib.c @@ -44,7 +44,9 @@ #undef gztell int le_deflate; +#define le_deflate_name "zlib deflate" int le_inflate; +#define le_inflate_name "zlib inflate" ZEND_DECLARE_MODULE_GLOBALS(zlib); @@ -65,14 +67,14 @@ static void php_zlib_free(voidpf opaque, voidpf address) void deflate_rsrc_dtor(zend_resource *res) { - z_stream *ctx = zend_fetch_resource(res, NULL, le_deflate); + z_stream *ctx = zend_fetch_resource(res, le_deflate_name, le_deflate); deflateEnd(ctx); efree(ctx); } void inflate_rsrc_dtor(zend_resource *res) { - z_stream *ctx = zend_fetch_resource(res, NULL, le_inflate); + z_stream *ctx = zend_fetch_resource(res, le_inflate_name, le_inflate); if (((php_zlib_context *) ctx)->inflateDict) { efree(((php_zlib_context *) ctx)->inflateDict); } @@ -670,8 +672,8 @@ static PHP_FUNCTION(name) \ } \ } \ if (level < -1 || level > 9) { \ - php_error_docref(NULL, E_WARNING, "compression level (" ZEND_LONG_FMT ") must be within -1..9", level); \ - RETURN_FALSE; \ + zend_value_error("Compression level (" ZEND_LONG_FMT ") must be within -1..9", level); \ + RETURN_THROWS(); \ } \ switch (encoding) { \ case PHP_ZLIB_ENCODING_RAW: \ @@ -679,8 +681,8 @@ static PHP_FUNCTION(name) \ case PHP_ZLIB_ENCODING_DEFLATE: \ break; \ default: \ - php_error_docref(NULL, E_WARNING, "encoding mode must be either ZLIB_ENCODING_RAW, ZLIB_ENCODING_GZIP or ZLIB_ENCODING_DEFLATE"); \ - RETURN_FALSE; \ + zend_value_error("Encoding mode must be either ZLIB_ENCODING_RAW, ZLIB_ENCODING_GZIP or ZLIB_ENCODING_DEFLATE"); \ + RETURN_THROWS(); \ } \ if ((out = php_zlib_encode(ZSTR_VAL(in), ZSTR_LEN(in), encoding, level)) == NULL) { \ RETURN_FALSE; \ @@ -699,8 +701,8 @@ static PHP_FUNCTION(name) \ RETURN_THROWS(); \ } \ if (max_len < 0) { \ - php_error_docref(NULL, E_WARNING, "length (" ZEND_LONG_FMT ") must be greater or equal zero", max_len); \ - RETURN_FALSE; \ + zend_value_error("Length (" ZEND_LONG_FMT ") must be greater or equal zero", max_len); \ + RETURN_THROWS(); \ } \ if (SUCCESS != php_zlib_decode(in_buf, in_len, &out_buf, &out_len, encoding, max_len)) { \ RETURN_FALSE; \ @@ -785,7 +787,7 @@ static zend_bool zlib_create_dictionary_string(HashTable *options, char **dict, } efree(strings); if (!EG(exception)) { - php_error_docref(NULL, E_WARNING, "dictionary entries must be non-empty strings"); + zend_value_error("Dictionary entries must be non-empty strings"); } return 0; } @@ -795,7 +797,7 @@ static zend_bool zlib_create_dictionary_string(HashTable *options, char **dict, efree(ptr); } while (--ptr >= strings); efree(strings); - php_error_docref(NULL, E_WARNING, "dictionary entries must not contain a NULL-byte"); + zend_value_error("Dictionary entries must not contain a NULL-byte"); return 0; } } @@ -817,7 +819,7 @@ static zend_bool zlib_create_dictionary_string(HashTable *options, char **dict, } break; default: - php_error_docref(NULL, E_WARNING, "dictionary must be of type zero-terminated string or array, got %s", zend_get_type_by_const(Z_TYPE_P(option_buffer))); + zend_type_error("dictionary must be of type zero-terminated string or array, got %s", zend_get_type_by_const(Z_TYPE_P(option_buffer))); return 0; } } @@ -844,8 +846,8 @@ PHP_FUNCTION(inflate_init) window = zval_get_long(option_buffer); } if (window < 8 || window > 15) { - php_error_docref(NULL, E_WARNING, "zlib window size (lograithm) (" ZEND_LONG_FMT ") must be within 8..15", window); - RETURN_FALSE; + zend_value_error("zlib window size (logarithm) (" ZEND_LONG_FMT ") must be within 8..15", window); + RETURN_THROWS(); } if (!zlib_create_dictionary_string(options, &dict, &dictlen)) { @@ -858,8 +860,8 @@ PHP_FUNCTION(inflate_init) case PHP_ZLIB_ENCODING_DEFLATE: break; default: - php_error_docref(NULL, E_WARNING, "encoding mode must be ZLIB_ENCODING_RAW, ZLIB_ENCODING_GZIP or ZLIB_ENCODING_DEFLATE"); - RETURN_FALSE; + zend_value_error("Encoding mode must be ZLIB_ENCODING_RAW, ZLIB_ENCODING_GZIP or ZLIB_ENCODING_DEFLATE"); + RETURN_THROWS(); } ctx = ecalloc(1, sizeof(php_zlib_context)); @@ -887,7 +889,6 @@ PHP_FUNCTION(inflate_init) php_error_docref(NULL, E_WARNING, "dictionary does not match expected dictionary (incorrect adler32 hash)"); efree(php_ctx->inflateDict); php_ctx->inflateDict = NULL; - RETURN_FALSE; EMPTY_SWITCH_DEFAULT_CASE() } } @@ -916,9 +917,8 @@ PHP_FUNCTION(inflate_add) RETURN_THROWS(); } - if (!(ctx = zend_fetch_resource_ex(res, NULL, le_inflate))) { - php_error_docref(NULL, E_WARNING, "Invalid zlib.inflate resource"); - RETURN_FALSE; + if ((ctx = zend_fetch_resource(Z_RES_P(res), le_inflate_name, le_inflate)) == NULL) { + RETURN_THROWS(); } switch (flush_type) { @@ -931,9 +931,9 @@ PHP_FUNCTION(inflate_add) break; default: - php_error_docref(NULL, E_WARNING, - "flush mode must be ZLIB_NO_FLUSH, ZLIB_PARTIAL_FLUSH, ZLIB_SYNC_FLUSH, ZLIB_FULL_FLUSH, ZLIB_BLOCK or ZLIB_FINISH"); - RETURN_FALSE; + zend_value_error( + "Flush mode must be ZLIB_NO_FLUSH, ZLIB_PARTIAL_FLUSH, ZLIB_SYNC_FLUSH, ZLIB_FULL_FLUSH, ZLIB_BLOCK or ZLIB_FINISH"); + RETURN_THROWS(); } /* Lazy-resetting the zlib stream so ctx->total_in remains available until the next inflate_add() call. */ @@ -1031,9 +1031,8 @@ PHP_FUNCTION(inflate_get_status) RETURN_THROWS(); } - if (!(ctx = zend_fetch_resource_ex(res, NULL, le_inflate))) { - php_error_docref(NULL, E_WARNING, "Invalid zlib.inflate resource"); - RETURN_FALSE; + if ((ctx = zend_fetch_resource(Z_RES_P(res), le_inflate_name, le_inflate)) == NULL) { + RETURN_THROWS(); } RETURN_LONG(((php_zlib_context *) ctx)->status); @@ -1052,9 +1051,8 @@ PHP_FUNCTION(inflate_get_read_len) RETURN_THROWS(); } - if (!(ctx = zend_fetch_resource_ex(res, NULL, le_inflate))) { - php_error_docref(NULL, E_WARNING, "Invalid zlib.inflate resource"); - RETURN_FALSE; + if ((ctx = zend_fetch_resource(Z_RES_P(res), le_inflate_name, le_inflate)) == NULL) { + RETURN_THROWS(); } RETURN_LONG(ctx->total_in); @@ -1080,24 +1078,24 @@ PHP_FUNCTION(deflate_init) level = zval_get_long(option_buffer); } if (level < -1 || level > 9) { - php_error_docref(NULL, E_WARNING, "compression level (" ZEND_LONG_FMT ") must be within -1..9", level); - RETURN_FALSE; + zend_value_error("Compression level (" ZEND_LONG_FMT ") must be within -1..9", level); + RETURN_THROWS(); } if (options && (option_buffer = zend_hash_str_find(options, ZEND_STRL("memory"))) != NULL) { memory = zval_get_long(option_buffer); } if (memory < 1 || memory > 9) { - php_error_docref(NULL, E_WARNING, "compression memory level (" ZEND_LONG_FMT ") must be within 1..9", memory); - RETURN_FALSE; + zend_value_error("Compression memory level (" ZEND_LONG_FMT ") must be within 1..9", memory); + RETURN_THROWS(); } if (options && (option_buffer = zend_hash_str_find(options, ZEND_STRL("window"))) != NULL) { window = zval_get_long(option_buffer); } if (window < 8 || window > 15) { - php_error_docref(NULL, E_WARNING, "zlib window size (logarithm) (" ZEND_LONG_FMT ") must be within 8..15", window); - RETURN_FALSE; + zend_value_error("zlib window size (logarithm) (" ZEND_LONG_FMT ") must be within 8..15", window); + RETURN_THROWS(); } if (options && (option_buffer = zend_hash_str_find(options, ZEND_STRL("strategy"))) != NULL) { @@ -1111,8 +1109,8 @@ PHP_FUNCTION(deflate_init) case Z_DEFAULT_STRATEGY: break; default: - php_error_docref(NULL, E_WARNING, "strategy must be one of ZLIB_FILTERED, ZLIB_HUFFMAN_ONLY, ZLIB_RLE, ZLIB_FIXED or ZLIB_DEFAULT_STRATEGY"); - RETURN_FALSE; + zend_value_error("Strategy must be one of ZLIB_FILTERED, ZLIB_HUFFMAN_ONLY, ZLIB_RLE, ZLIB_FIXED or ZLIB_DEFAULT_STRATEGY"); + RETURN_THROWS(); } if (!zlib_create_dictionary_string(options, &dict, &dictlen)) { @@ -1125,9 +1123,8 @@ PHP_FUNCTION(deflate_init) case PHP_ZLIB_ENCODING_DEFLATE: break; default: - php_error_docref(NULL, E_WARNING, - "encoding mode must be ZLIB_ENCODING_RAW, ZLIB_ENCODING_GZIP or ZLIB_ENCODING_DEFLATE"); - RETURN_FALSE; + zend_value_error("Encoding mode must be ZLIB_ENCODING_RAW, ZLIB_ENCODING_GZIP or ZLIB_ENCODING_DEFLATE"); + RETURN_THROWS(); } ctx = ecalloc(1, sizeof(php_zlib_context)); @@ -1172,17 +1169,15 @@ PHP_FUNCTION(deflate_add) RETURN_THROWS(); } - if (!(ctx = zend_fetch_resource_ex(res, NULL, le_deflate))) { - php_error_docref(NULL, E_WARNING, "Invalid deflate resource"); - RETURN_FALSE; + if ((ctx = zend_fetch_resource(Z_RES_P(res), le_deflate_name, le_deflate)) == NULL) { + RETURN_THROWS(); } switch (flush_type) { case Z_BLOCK: #if ZLIB_VERNUM < 0x1240L - php_error_docref(NULL, E_WARNING, - "zlib >= 1.2.4 required for BLOCK deflate; current version: %s", ZLIB_VERSION); - RETURN_FALSE; + zend_throw_error(NULL, "zlib >= 1.2.4 required for BLOCK deflate; current version: %s", ZLIB_VERSION); + RETURN_THROWS(); #endif case Z_NO_FLUSH: case Z_PARTIAL_FLUSH: @@ -1192,9 +1187,9 @@ PHP_FUNCTION(deflate_add) break; default: - php_error_docref(NULL, E_WARNING, - "flush mode must be ZLIB_NO_FLUSH, ZLIB_PARTIAL_FLUSH, ZLIB_SYNC_FLUSH, ZLIB_FULL_FLUSH, ZLIB_BLOCK or ZLIB_FINISH"); - RETURN_FALSE; + zend_value_error( + "Flush mode must be ZLIB_NO_FLUSH, ZLIB_PARTIAL_FLUSH, ZLIB_SYNC_FLUSH, ZLIB_FULL_FLUSH, ZLIB_BLOCK or ZLIB_FINISH"); + RETURN_THROWS(); } if (in_len <= 0 && flush_type != Z_FINISH) { diff --git a/ext/zlib/zlib.stub.php b/ext/zlib/zlib.stub.php index 312e570de02..a4c02bd0ccc 100644 --- a/ext/zlib/zlib.stub.php +++ b/ext/zlib/zlib.stub.php @@ -73,7 +73,7 @@ function inflate_init(int $encoding, array $options = []) {} function inflate_add($context, string $encoded_data, int $flush_mode = ZLIB_SYNC_FLUSH): string|false {} /** @param resource $resource */ -function inflate_get_status($resource): int|false {} +function inflate_get_status($resource): int {} /** @param resource $resource */ -function inflate_get_read_len($resource): int|false {} +function inflate_get_read_len($resource): int {} diff --git a/ext/zlib/zlib_arginfo.h b/ext/zlib/zlib_arginfo.h index 15f107922a4..fc5c81b4653 100644 --- a/ext/zlib/zlib_arginfo.h +++ b/ext/zlib/zlib_arginfo.h @@ -114,7 +114,7 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_inflate_add, 0, 2, MAY_BE_STRING ZEND_ARG_TYPE_INFO(0, flush_mode, IS_LONG, 0) ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_inflate_get_status, 0, 1, MAY_BE_LONG|MAY_BE_FALSE) +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_inflate_get_status, 0, 1, IS_LONG, 0) ZEND_ARG_INFO(0, resource) ZEND_END_ARG_INFO()