Convert some warnings to Error in zlib extension

Closes GH-4985
This commit is contained in:
George Peter Banyard 2019-12-08 14:15:27 +01:00
parent 66659d6cf6
commit 928afd8fb7
13 changed files with 220 additions and 155 deletions

View File

@ -5,9 +5,13 @@ gzcompress()/gzuncompress() and invalid params
--FILE--
<?php
var_dump(gzcompress("", 1000));
var_dump(gzcompress("", -1));
try {
var_dump(gzcompress("", 1000));
} catch (\ValueError $e) {
echo $e->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

View File

@ -5,7 +5,12 @@ gzdeflate()/gzinflate() and invalid params
--FILE--
<?php
var_dump(gzdeflate("", 1000));
try {
var_dump(gzcompress("", 1000));
} catch (\ValueError $e) {
echo $e->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

View File

@ -5,9 +5,21 @@ gzencode() and invalid params
--FILE--
<?php
var_dump(gzencode("", -10));
var_dump(gzencode("", 100));
var_dump(gzencode("", 1, 100));
try {
var_dump(gzencode("", -10));
} catch (\ValueError $e) {
echo $e->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

View File

@ -9,15 +9,23 @@ if (!extension_loaded("zlib")) {
--FILE--
<?php
$badResource = fopen("php://memory", "r+");
var_dump(deflate_add($badResource, "test"));
try {
var_dump(deflate_add($badResource, "test"));
} catch (\TypeError $e) {
echo $e->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

View File

@ -8,24 +8,41 @@ if (!extension_loaded("zlib")) {
?>
--FILE--
<?php
var_dump(deflate_init(42));
var_dump(deflate_init(ZLIB_ENCODING_DEFLATE, ['level' => 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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -8,15 +8,23 @@ if (!extension_loaded("zlib")) {
?>
--FILE--
<?php
$badResource = fopen("php://memory", "r+");
var_dump(inflate_add($badResource, "test"));
try {
var_dump(inflate_add($badResource, "test"));
} catch (\TypeError $e) {
echo $e->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

View File

@ -8,8 +8,13 @@ if (!extension_loaded("zlib")) {
?>
--FILE--
<?php
var_dump(inflate_init(42));
try {
var_dump(inflate_init(42));
} catch (\ValueError $e) {
echo $e->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

View File

@ -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) {

View File

@ -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 {}

View File

@ -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()