From a3b61b4dee7abd2ad8107cc4296cf969cf4fbb52 Mon Sep 17 00:00:00 2001 From: eskyuu Date: Fri, 21 Aug 2026 19:59:59 +0800 Subject: [PATCH 1/3] Add snmp_init_mib function to allow MIB tree to be reset using environment variables (#21452) RFC: https://wiki.php.net/rfc/snmp_improvements_2026#allow_the_snmp_mib_to_be_reset --- ext/snmp/snmp.c | 39 ++++++++++++++++++++++++++++++++++++++- ext/snmp/snmp.stub.php | 2 ++ ext/snmp/snmp_arginfo.h | 8 +++++++- 3 files changed, 47 insertions(+), 2 deletions(-) diff --git a/ext/snmp/snmp.c b/ext/snmp/snmp.c index 0c3e53614a6a..e921adb98352 100644 --- a/ext/snmp/snmp.c +++ b/ext/snmp/snmp.c @@ -89,6 +89,8 @@ typedef struct snmp_session php_snmp_session; } \ } +static bool mib_needs_reset; + ZEND_DECLARE_MODULE_GLOBALS(snmp) static PHP_GINIT_FUNCTION(snmp); @@ -1658,6 +1660,7 @@ PHP_FUNCTION(snmp_read_mib) RETURN_THROWS(); } + mib_needs_reset = 1; if (!read_mib(filename)) { char *error = strerror(errno); php_error_docref(NULL, E_WARNING, "Error while reading MIB file '%s': %s", filename, error); @@ -1667,6 +1670,27 @@ PHP_FUNCTION(snmp_read_mib) } /* }}} */ +/* {{{ Resets the MIB tree and set the mib directories to the provided mibdirs. */ +PHP_FUNCTION(snmp_init_mib) +{ + zend_string *mibdirs = NULL; + + ZEND_PARSE_PARAMETERS_START(0, 1) + Z_PARAM_OPTIONAL + Z_PARAM_PATH_STR_OR_NULL(mibdirs) + ZEND_PARSE_PARAMETERS_END(); + + // If the mibdirs has been changed, we need to reset the MIB tree at the end of the request + if (mibdirs != NULL) { + mib_needs_reset = 1; + } + + shutdown_mib(); + netsnmp_ds_set_string(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_MIBDIRS, ZSTR_VAL(mibdirs)); + init_mib(); +} +/* }}} */ + /* {{{ Creates a new SNMP session to specified host. */ PHP_METHOD(SNMP, __construct) { @@ -2201,6 +2225,19 @@ PHP_MSHUTDOWN_FUNCTION(snmp) } /* }}} */ +/* {{{ PHP_RSHUTDOWN_FUNCTION */ +static PHP_RSHUTDOWN_FUNCTION(snmp) +{ + if (mib_needs_reset) { + shutdown_mib(); + netsnmp_ds_set_string(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_MIBDIRS, NULL); + init_mib(); + } + + return SUCCESS; +} +/* }}} */ + /* {{{ PHP_MINFO_FUNCTION */ PHP_MINFO_FUNCTION(snmp) { @@ -2228,7 +2265,7 @@ zend_module_entry snmp_module_entry = { PHP_MINIT(snmp), PHP_MSHUTDOWN(snmp), NULL, - NULL, + PHP_RSHUTDOWN(snmp), PHP_MINFO(snmp), PHP_SNMP_VERSION, PHP_MODULE_GLOBALS(snmp), diff --git a/ext/snmp/snmp.stub.php b/ext/snmp/snmp.stub.php index 0283f7ff7620..0f939b5b23fd 100644 --- a/ext/snmp/snmp.stub.php +++ b/ext/snmp/snmp.stub.php @@ -181,6 +181,8 @@ function snmp_get_valueretrieval(): int {} function snmp_read_mib(string $filename): bool {} +function snmp_init_mib(?string $mibdirs): void {} + /** @not-serializable */ class SNMP { diff --git a/ext/snmp/snmp_arginfo.h b/ext/snmp/snmp_arginfo.h index 07caa70fa9eb..85b9a1131f1c 100644 --- a/ext/snmp/snmp_arginfo.h +++ b/ext/snmp/snmp_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit snmp.stub.php instead. - * Stub hash: 20039fa88cb9f8a861bf3bf3e2e5e291e50c6a12 */ + * Stub hash: 18e6ffa1acd3c1b6d1c962be97f36e9a46a317a2 */ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_snmpget, 0, 3, IS_MIXED, 0) ZEND_ARG_TYPE_INFO(0, hostname, IS_STRING, 0) @@ -114,6 +114,10 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_snmp_read_mib, 0, 1, _IS_BOOL, 0 ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) ZEND_END_ARG_INFO() +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_snmp_init_mib, 0, 1, IS_VOID, 0) + ZEND_ARG_TYPE_INFO(0, mibdirs, IS_STRING, 1) +ZEND_END_ARG_INFO() + ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SNMP___construct, 0, 0, 3) ZEND_ARG_TYPE_INFO(0, version, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, hostname, IS_STRING, 0) @@ -185,6 +189,7 @@ ZEND_FUNCTION(snmp3_set); ZEND_FUNCTION(snmp_set_valueretrieval); ZEND_FUNCTION(snmp_get_valueretrieval); ZEND_FUNCTION(snmp_read_mib); +ZEND_FUNCTION(snmp_init_mib); ZEND_METHOD(SNMP, __construct); ZEND_METHOD(SNMP, close); ZEND_METHOD(SNMP, setSecurity); @@ -220,6 +225,7 @@ static const zend_function_entry ext_functions[] = { ZEND_FE(snmp_set_valueretrieval, arginfo_snmp_set_valueretrieval) ZEND_FE(snmp_get_valueretrieval, arginfo_snmp_get_valueretrieval) ZEND_FE(snmp_read_mib, arginfo_snmp_read_mib) + ZEND_FE(snmp_init_mib, arginfo_snmp_init_mib) ZEND_FE_END }; From ee908f5542e3eeb2843440cf757a7e95a7ff1c83 Mon Sep 17 00:00:00 2001 From: Gina Peter Banyard Date: Fri, 21 Aug 2026 13:31:45 +0100 Subject: [PATCH 2/3] Zend: normalise behaviour around class name ZPP specifier (#23359) Splitting the behavioural change of #23052 out into this and come up with something that is hopefully more sensible and consistent between fast and slow ZPP and the object or class_name Fast ZPP specifier. --- Zend/tests/bug70914.phpt | 17 -- .../get_class_vars/get_class_vars_001.phpt | 2 +- Zend/tests/get_parent_class_basic.phpt | 6 +- Zend/tests/zpp/bug70914.phpt | 15 ++ ...lass-string_zpp_specifier_strict_mode.phpt | 192 ++++++++--------- .../class-string_zpp_specifier_weak_mode.phpt | 196 ++++++++---------- .../obj_or_class_name_zpp_strict_mode.phpt | 12 +- .../zpp/obj_or_class_name_zpp_weak_mode.phpt | 12 +- Zend/zend_API.c | 62 ++++-- Zend/zend_API.h | 2 + .../HTMLDocument_registerNodeClass_01.phpt | 2 +- ext/mysqli/tests/mysqli_fetch_object.phpt | 2 +- ext/mysqli/tests/mysqli_fetch_object_oo.phpt | 4 +- .../tests/pdo_mysql_stmt_fetchobject.phpt | 2 +- ext/pgsql/tests/22pg_fetch_object.phpt | 2 +- ext/phar/tests/phar_oo_006.phpt | 2 +- .../arrayObject___construct_error1.phpt | 4 +- .../arrayObject_setIteratorClass_error1.phpt | 8 +- .../tests/SplFileInfo_setFileClass_error.phpt | 2 +- .../tests/SplFileInfo_setInfoClass_error.phpt | 2 +- ext/spl/tests/bug80719.phpt | 2 +- .../get_class_methods_basic_001.phpt | 2 +- .../get_class_methods_variation_001.phpt | 172 --------------- .../get_parent_class_variation_002.phpt | 176 ---------------- ext/standard/tests/file/userstreams.phpt | 2 +- ext/standard/tests/filters/001.phpt | 7 - ...am_filter_register_non_existing_class.phpt | 2 +- .../transformToDoc_class_exceptions.phpt | 2 +- 28 files changed, 280 insertions(+), 631 deletions(-) delete mode 100644 Zend/tests/bug70914.phpt create mode 100644 Zend/tests/zpp/bug70914.phpt delete mode 100644 ext/standard/tests/class_object/get_class_methods_variation_001.phpt delete mode 100644 ext/standard/tests/class_object/get_parent_class_variation_002.phpt diff --git a/Zend/tests/bug70914.phpt b/Zend/tests/bug70914.phpt deleted file mode 100644 index 73a43a5600dc..000000000000 --- a/Zend/tests/bug70914.phpt +++ /dev/null @@ -1,17 +0,0 @@ ---TEST-- -Bug #70914 zend_throw_or_error() format string vulnerability ---EXTENSIONS-- -pdo_sqlite ---FILE-- -query('SELECT 1'); -try { - $re = $st->fetchObject('%Z'); -} catch (TypeError $e) { - echo $e->getMessage(), "\n"; -} -?> ---EXPECT-- -PDOStatement::fetchObject(): Argument #1 ($class) must be a valid class name, %Z given diff --git a/Zend/tests/get_class_vars/get_class_vars_001.phpt b/Zend/tests/get_class_vars/get_class_vars_001.phpt index 84f502610eca..a884409121c6 100644 --- a/Zend/tests/get_class_vars/get_class_vars_001.phpt +++ b/Zend/tests/get_class_vars/get_class_vars_001.phpt @@ -37,4 +37,4 @@ array(2) { ["aa"]=> int(4) } -get_class_vars(): Argument #1 ($class) must be a valid class name, Unknown given +get_class_vars(): Argument #1 ($class) must be a valid class name, "Unknown" given diff --git a/Zend/tests/get_parent_class_basic.phpt b/Zend/tests/get_parent_class_basic.phpt index b439fbf9fb3e..8eabd64ca455 100644 --- a/Zend/tests/get_parent_class_basic.phpt +++ b/Zend/tests/get_parent_class_basic.phpt @@ -90,9 +90,9 @@ bool(false) string(3) "foo" bool(false) bool(false) -get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, string given -get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, string given -get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, string given +get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, "" given +get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, "[[[[" given +get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, " " given bool(false) get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, array given get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, int given diff --git a/Zend/tests/zpp/bug70914.phpt b/Zend/tests/zpp/bug70914.phpt new file mode 100644 index 000000000000..f7f37b3b6ea2 --- /dev/null +++ b/Zend/tests/zpp/bug70914.phpt @@ -0,0 +1,15 @@ +--TEST-- +Bug #70914 zend_throw_or_error() format string vulnerability +--EXTENSIONS-- +zend_test +--FILE-- +getMessage(), "\n"; +} +?> +--EXPECT-- +TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, "%Z" given diff --git a/Zend/tests/zpp/class-string_zpp_specifier_strict_mode.phpt b/Zend/tests/zpp/class-string_zpp_specifier_strict_mode.phpt index bdc48e27d4ad..ffb9788f1cb4 100644 --- a/Zend/tests/zpp/class-string_zpp_specifier_strict_mode.phpt +++ b/Zend/tests/zpp/class-string_zpp_specifier_strict_mode.phpt @@ -57,77 +57,77 @@ foreach ($types as $name => $type) { ?> --EXPECTF-- Using null: -TypeError: zend_class_name(): Argument #1 ($param) must be of type string, null given +TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, null given NULL -TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, given +TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, null given NULL -TypeError: zend_class_name(): Argument #1 ($param) must be of type string, null given +TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, null given NULL -TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, given +TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, null given NULL Using false: -TypeError: zend_class_name(): Argument #1 ($param) must be of type string, false given -TypeError: zend_class_name_or_null(): Argument #1 ($param) must be of type ?string, false given -TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, given -TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, given -TypeError: zend_class_name(): Argument #1 ($param) must be of type string, false given -TypeError: zend_class_name_or_null(): Argument #1 ($param) must be of type ?string, false given -TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, given -TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, given +TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, false given +TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, false given +TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, false given +TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, false given +TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, false given +TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, false given +TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, false given +TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, false given Using true: -TypeError: zend_class_name(): Argument #1 ($param) must be of type string, true given -TypeError: zend_class_name_or_null(): Argument #1 ($param) must be of type ?string, true given -TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, 1 given -TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, 1 given -TypeError: zend_class_name(): Argument #1 ($param) must be of type string, true given -TypeError: zend_class_name_or_null(): Argument #1 ($param) must be of type ?string, true given -TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, 1 given -TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, 1 given +TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, true given +TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, true given +TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, true given +TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, true given +TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, true given +TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, true given +TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, true given +TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, true given Using 42: -TypeError: zend_class_name(): Argument #1 ($param) must be of type string, int given -TypeError: zend_class_name_or_null(): Argument #1 ($param) must be of type ?string, int given -TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, 42 given -TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, 42 given -TypeError: zend_class_name(): Argument #1 ($param) must be of type string, int given -TypeError: zend_class_name_or_null(): Argument #1 ($param) must be of type ?string, int given -TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, 42 given -TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, 42 given +TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, int given +TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, int given +TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, int given +TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, int given +TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, int given +TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, int given +TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, int given +TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, int given Using 73.5: -TypeError: zend_class_name(): Argument #1 ($param) must be of type string, float given -TypeError: zend_class_name_or_null(): Argument #1 ($param) must be of type ?string, float given -TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, 73.5 given -TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, 73.5 given -TypeError: zend_class_name(): Argument #1 ($param) must be of type string, float given -TypeError: zend_class_name_or_null(): Argument #1 ($param) must be of type ?string, float given -TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, 73.5 given -TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, 73.5 given +TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, float given +TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, float given +TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, float given +TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, float given +TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, float given +TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, float given +TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, float given +TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, float given Using 'string': -TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, string given -TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name, string given -TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, string given -TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, string given -TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, string given -TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name, string given -TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, string given -TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, string given +TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, "string" given +TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, "string" given +TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, "string" given +TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, "string" given +TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, "string" given +TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, "string" given +TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, "string" given +TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, "string" given Using '15': -TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, 15 given -TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name, 15 given -TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, 15 given -TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, 15 given -TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, 15 given -TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name, 15 given -TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, 15 given -TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, 15 given +TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, "15" given +TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, "15" given +TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, "15" given +TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, "15" given +TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, "15" given +TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, "15" given +TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, "15" given +TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, "15" given Using '56.7': -TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, 56.7 given -TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name, 56.7 given -TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, 56.7 given -TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, 56.7 given -TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, 56.7 given -TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name, 56.7 given -TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, 56.7 given -TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, 56.7 given +TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, "56.7" given +TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, "56.7" given +TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, "56.7" given +TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, "56.7" given +TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, "56.7" given +TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, "56.7" given +TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, "56.7" given +TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, "56.7" given Using 'stdClass': string(8) "stdClass" string(8) "stdClass" @@ -147,46 +147,38 @@ string(%d) "class@anonymous%s" string(%d) "class@anonymous%s" string(%d) "class@anonymous%s" Using []: -TypeError: zend_class_name(): Argument #1 ($param) must be of type string, array given -TypeError: zend_class_name_or_null(): Argument #1 ($param) must be of type ?string, array given - -Warning: Array to string conversion in %s on line %d -TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, Array given - -Warning: Array to string conversion in %s on line %d -TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, Array given -TypeError: zend_class_name(): Argument #1 ($param) must be of type string, array given -TypeError: zend_class_name_or_null(): Argument #1 ($param) must be of type ?string, array given - -Warning: Array to string conversion in %s on line %d -TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, Array given - -Warning: Array to string conversion in %s on line %d -TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, Array given +TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, array given +TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, array given +TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, array given +TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, array given +TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, array given +TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, array given +TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, array given +TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, array given Using new stdClass(): -TypeError: zend_class_name(): Argument #1 ($param) must be of type string, stdClass given -TypeError: zend_class_name_or_null(): Argument #1 ($param) must be of type ?string, stdClass given -Error: Object of class stdClass could not be converted to string -Error: Object of class stdClass could not be converted to string -TypeError: zend_class_name(): Argument #1 ($param) must be of type string, stdClass given -TypeError: zend_class_name_or_null(): Argument #1 ($param) must be of type ?string, stdClass given -Error: Object of class stdClass could not be converted to string -Error: Object of class stdClass could not be converted to string +TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, stdClass given +TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, stdClass given +TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, stdClass given +TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, stdClass given +TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, stdClass given +TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, stdClass given +TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, stdClass given +TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, stdClass given Using new S(): -TypeError: zend_class_name(): Argument #1 ($param) must be of type string, S given -TypeError: zend_class_name_or_null(): Argument #1 ($param) must be of type ?string, S given -TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, S class given -TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, S class given -TypeError: zend_class_name(): Argument #1 ($param) must be of type string, S given -TypeError: zend_class_name_or_null(): Argument #1 ($param) must be of type ?string, S given -TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, S class given -TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, S class given +TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, S given +TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, S given +TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, S given +TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, S given +TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, S given +TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, S given +TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, S given +TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, S given Using STDOUT: -TypeError: zend_class_name(): Argument #1 ($param) must be of type string, resource given -TypeError: zend_class_name_or_null(): Argument #1 ($param) must be of type ?string, resource given -TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, Resource id #2 given -TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, Resource id #2 given -TypeError: zend_class_name(): Argument #1 ($param) must be of type string, resource given -TypeError: zend_class_name_or_null(): Argument #1 ($param) must be of type ?string, resource given -TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, Resource id #2 given -TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, Resource id #2 given +TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, resource given +TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, resource given +TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, resource given +TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, resource given +TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, resource given +TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, resource given +TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, resource given +TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, resource given diff --git a/Zend/tests/zpp/class-string_zpp_specifier_weak_mode.phpt b/Zend/tests/zpp/class-string_zpp_specifier_weak_mode.phpt index 9341ecbb4102..6dd0a5b046b0 100644 --- a/Zend/tests/zpp/class-string_zpp_specifier_weak_mode.phpt +++ b/Zend/tests/zpp/class-string_zpp_specifier_weak_mode.phpt @@ -55,81 +55,77 @@ foreach ($types as $name => $type) { ?> --EXPECTF-- Using null: - -Deprecated: zend_class_name(): Passing null to parameter #1 ($param) of type string is deprecated in %s on line %d -TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, given +TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, null given NULL -TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, given +TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, null given NULL - -Deprecated: zend_class_name(): Passing null to parameter #1 ($param) of type string is deprecated in %s on line %d -TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, given +TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, null given NULL -TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, given +TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, null given NULL Using false: -TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, given -TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name, given -TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, given -TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, given -TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, given -TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name, given -TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, given -TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, given +TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, false given +TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, false given +TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, false given +TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, false given +TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, false given +TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, false given +TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, false given +TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, false given Using true: -TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, 1 given -TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name, 1 given -TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, 1 given -TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, 1 given -TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, 1 given -TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name, 1 given -TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, 1 given -TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, 1 given +TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, true given +TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, true given +TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, true given +TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, true given +TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, true given +TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, true given +TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, true given +TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, true given Using 42: -TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, 42 given -TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name, 42 given -TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, 42 given -TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, 42 given -TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, 42 given -TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name, 42 given -TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, 42 given -TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, 42 given +TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, int given +TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, int given +TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, int given +TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, int given +TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, int given +TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, int given +TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, int given +TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, int given Using 73.5: -TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, 73.5 given -TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name, 73.5 given -TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, 73.5 given -TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, 73.5 given -TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, 73.5 given -TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name, 73.5 given -TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, 73.5 given -TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, 73.5 given +TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, float given +TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, float given +TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, float given +TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, float given +TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, float given +TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, float given +TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, float given +TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, float given Using 'string': -TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, string given -TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name, string given -TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, string given -TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, string given -TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, string given -TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name, string given -TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, string given -TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, string given +TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, "string" given +TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, "string" given +TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, "string" given +TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, "string" given +TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, "string" given +TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, "string" given +TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, "string" given +TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, "string" given Using '15': -TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, 15 given -TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name, 15 given -TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, 15 given -TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, 15 given -TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, 15 given -TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name, 15 given -TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, 15 given -TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, 15 given +TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, "15" given +TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, "15" given +TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, "15" given +TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, "15" given +TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, "15" given +TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, "15" given +TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, "15" given +TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, "15" given Using '56.7': -TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, 56.7 given -TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name, 56.7 given -TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, 56.7 given -TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, 56.7 given -TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, 56.7 given -TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name, 56.7 given -TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, 56.7 given -TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, 56.7 given +TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, "56.7" given +TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, "56.7" given +TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, "56.7" given +TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, "56.7" given +TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, "56.7" given +TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, "56.7" given +TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, "56.7" given +TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, "56.7" given Using 'stdClass': string(8) "stdClass" string(8) "stdClass" @@ -149,46 +145,38 @@ string(%d) "class@anonymous%s" string(%d) "class@anonymous%s" string(%d) "class@anonymous%s" Using []: -TypeError: zend_class_name(): Argument #1 ($param) must be of type string, array given -TypeError: zend_class_name_or_null(): Argument #1 ($param) must be of type ?string, array given - -Warning: Array to string conversion in %s on line %d -TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, Array given - -Warning: Array to string conversion in %s on line %d -TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, Array given -TypeError: zend_class_name(): Argument #1 ($param) must be of type string, array given -TypeError: zend_class_name_or_null(): Argument #1 ($param) must be of type ?string, array given - -Warning: Array to string conversion in %s on line %d -TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, Array given - -Warning: Array to string conversion in %s on line %d -TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, Array given +TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, array given +TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, array given +TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, array given +TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, array given +TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, array given +TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, array given +TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, array given +TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, array given Using new stdClass(): -TypeError: zend_class_name(): Argument #1 ($param) must be of type string, stdClass given -TypeError: zend_class_name_or_null(): Argument #1 ($param) must be of type ?string, stdClass given -Error: Object of class stdClass could not be converted to string -Error: Object of class stdClass could not be converted to string -TypeError: zend_class_name(): Argument #1 ($param) must be of type string, stdClass given -TypeError: zend_class_name_or_null(): Argument #1 ($param) must be of type ?string, stdClass given -Error: Object of class stdClass could not be converted to string -Error: Object of class stdClass could not be converted to string +TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, stdClass given +TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, stdClass given +TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, stdClass given +TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, stdClass given +TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, stdClass given +TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, stdClass given +TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, stdClass given +TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, stdClass given Using new S(): -TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, S class given -TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name, S class given -TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, S class given -TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, S class given -TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, S class given -TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name, S class given -TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, S class given -TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, S class given +TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, "S class" given +TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, "S class" given +TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, "S class" given +TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, "S class" given +TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, "S class" given +TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, "S class" given +TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, "S class" given +TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, "S class" given Using STDOUT: -TypeError: zend_class_name(): Argument #1 ($param) must be of type string, resource given -TypeError: zend_class_name_or_null(): Argument #1 ($param) must be of type ?string, resource given -TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, Resource id #2 given -TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, Resource id #2 given -TypeError: zend_class_name(): Argument #1 ($param) must be of type string, resource given -TypeError: zend_class_name_or_null(): Argument #1 ($param) must be of type ?string, resource given -TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, Resource id #2 given -TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, Resource id #2 given +TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, resource given +TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, resource given +TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, resource given +TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, resource given +TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, resource given +TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, resource given +TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, resource given +TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, resource given diff --git a/Zend/tests/zpp/obj_or_class_name_zpp_strict_mode.phpt b/Zend/tests/zpp/obj_or_class_name_zpp_strict_mode.phpt index 9bdfd66ae4ee..7d2cac55e3b2 100644 --- a/Zend/tests/zpp/obj_or_class_name_zpp_strict_mode.phpt +++ b/Zend/tests/zpp/obj_or_class_name_zpp_strict_mode.phpt @@ -41,14 +41,14 @@ Using 73.5: TypeError: zend_obj_or_class_name(): Argument #1 ($param) must be an object or a valid class name, float given TypeError: zend_obj_or_class_name_or_null(): Argument #1 ($param) must be an object, a valid class name, or null, float given Using 'string': -TypeError: zend_obj_or_class_name(): Argument #1 ($param) must be an object or a valid class name, string given -TypeError: zend_obj_or_class_name_or_null(): Argument #1 ($param) must be an object, a valid class name, or null, string given +TypeError: zend_obj_or_class_name(): Argument #1 ($param) must be an object or a valid class name, "string" given +TypeError: zend_obj_or_class_name_or_null(): Argument #1 ($param) must be an object, a valid class name, or null, "string" given Using '15': -TypeError: zend_obj_or_class_name(): Argument #1 ($param) must be an object or a valid class name, string given -TypeError: zend_obj_or_class_name_or_null(): Argument #1 ($param) must be an object, a valid class name, or null, string given +TypeError: zend_obj_or_class_name(): Argument #1 ($param) must be an object or a valid class name, "15" given +TypeError: zend_obj_or_class_name_or_null(): Argument #1 ($param) must be an object, a valid class name, or null, "15" given Using '56.7': -TypeError: zend_obj_or_class_name(): Argument #1 ($param) must be an object or a valid class name, string given -TypeError: zend_obj_or_class_name_or_null(): Argument #1 ($param) must be an object, a valid class name, or null, string given +TypeError: zend_obj_or_class_name(): Argument #1 ($param) must be an object or a valid class name, "56.7" given +TypeError: zend_obj_or_class_name_or_null(): Argument #1 ($param) must be an object, a valid class name, or null, "56.7" given Using 'stdClass': string(8) "stdClass" string(8) "stdClass" diff --git a/Zend/tests/zpp/obj_or_class_name_zpp_weak_mode.phpt b/Zend/tests/zpp/obj_or_class_name_zpp_weak_mode.phpt index c14250a14f9e..cafe821364e9 100644 --- a/Zend/tests/zpp/obj_or_class_name_zpp_weak_mode.phpt +++ b/Zend/tests/zpp/obj_or_class_name_zpp_weak_mode.phpt @@ -39,14 +39,14 @@ Using 73.5: TypeError: zend_obj_or_class_name(): Argument #1 ($param) must be an object or a valid class name, float given TypeError: zend_obj_or_class_name_or_null(): Argument #1 ($param) must be an object, a valid class name, or null, float given Using 'string': -TypeError: zend_obj_or_class_name(): Argument #1 ($param) must be an object or a valid class name, string given -TypeError: zend_obj_or_class_name_or_null(): Argument #1 ($param) must be an object, a valid class name, or null, string given +TypeError: zend_obj_or_class_name(): Argument #1 ($param) must be an object or a valid class name, "string" given +TypeError: zend_obj_or_class_name_or_null(): Argument #1 ($param) must be an object, a valid class name, or null, "string" given Using '15': -TypeError: zend_obj_or_class_name(): Argument #1 ($param) must be an object or a valid class name, string given -TypeError: zend_obj_or_class_name_or_null(): Argument #1 ($param) must be an object, a valid class name, or null, string given +TypeError: zend_obj_or_class_name(): Argument #1 ($param) must be an object or a valid class name, "15" given +TypeError: zend_obj_or_class_name_or_null(): Argument #1 ($param) must be an object, a valid class name, or null, "15" given Using '56.7': -TypeError: zend_obj_or_class_name(): Argument #1 ($param) must be an object or a valid class name, string given -TypeError: zend_obj_or_class_name_or_null(): Argument #1 ($param) must be an object, a valid class name, or null, string given +TypeError: zend_obj_or_class_name(): Argument #1 ($param) must be an object or a valid class name, "56.7" given +TypeError: zend_obj_or_class_name_or_null(): Argument #1 ($param) must be an object, a valid class name, or null, "56.7" given Using 'stdClass': string(8) "stdClass" string(8) "stdClass" diff --git a/Zend/zend_API.c b/Zend/zend_API.c index b5bea957106b..e36ca8d1cfe2 100644 --- a/Zend/zend_API.c +++ b/Zend/zend_API.c @@ -284,6 +284,16 @@ ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_parameter_type_error(uint32_t n return; } + if (Z_TYPE_P(arg) == IS_STRING && ( + expected_type == Z_EXPECTED_CLASS_NAME || + expected_type == Z_EXPECTED_CLASS_NAME_OR_NULL || + expected_type == Z_EXPECTED_OBJECT_OR_CLASS_NAME || + expected_type == Z_EXPECTED_OBJECT_OR_CLASS_NAME_OR_NULL + )) { + zend_argument_type_error(num, "must be %s, \"%s\" given", expected_error[expected_type], Z_STRVAL_P(arg)); + return; + } + zend_argument_type_error(num, "must be %s, %s given", expected_error[expected_type], zend_zval_value_name(arg)); } /* }}} */ @@ -492,23 +502,28 @@ ZEND_API bool ZEND_FASTCALL zend_parse_arg_class(zval *arg, zend_class_entry **p *pce = NULL; return 1; } - zend_string *class_name; - if (!zend_parse_arg_str(arg, &class_name, check_null, num)) { - *pce = NULL; - zend_wrong_parameter_error(ZPP_ERROR_WRONG_ARG, num, NULL, check_null ? Z_EXPECTED_STRING_OR_NULL : Z_EXPECTED_STRING, arg); - return 0; + /* Only accept string and Stringable(?) as int/foat/bool are not valid class names */ + if (UNEXPECTED(Z_TYPE_P(arg) != IS_STRING)) { + if (Z_TYPE_P(arg) != IS_OBJECT || !zend_parse_arg_str_slow(arg, num)) { + *pce = NULL; + zend_wrong_parameter_type_error(num, check_null ? Z_EXPECTED_CLASS_NAME_OR_NULL : Z_EXPECTED_CLASS_NAME, arg); + return 0; + } + /* Object was converted to string */ + ZEND_ASSERT(Z_TYPE_P(arg) == IS_STRING); } + zend_string *class_name = Z_STR_P(arg); *pce = zend_lookup_class(class_name); if (ce_base) { if ((!*pce || !instanceof_function(*pce, ce_base))) { - zend_argument_type_error(num, "must be a class name derived from %s, %s given", ZSTR_VAL(ce_base->name), ZSTR_VAL(class_name)); + zend_argument_type_error(num, "must be a class name derived from %s, \"%s\" given", ZSTR_VAL(ce_base->name), ZSTR_VAL(class_name)); *pce = NULL; return 0; } } if (!*pce) { - zend_argument_type_error(num, "must be a valid class name, %s given", ZSTR_VAL(class_name)); + zend_wrong_parameter_type_error(num, check_null ? Z_EXPECTED_CLASS_NAME_OR_NULL : Z_EXPECTED_CLASS_NAME, arg); return 0; } return 1; @@ -1020,33 +1035,42 @@ static const char *zend_parse_arg_impl(zval *arg, va_list *va, const char **spec case 'C': { - zend_class_entry *lookup, **pce = va_arg(*va, zend_class_entry **); - zend_class_entry *ce_base = *pce; + zend_class_entry **pce = va_arg(*va, zend_class_entry **); + const zend_class_entry *ce_base = *pce; if (check_null && Z_TYPE_P(arg) == IS_NULL) { *pce = NULL; break; } - if (!try_convert_to_string(arg)) { - *pce = NULL; - return ""; /* try_convert_to_string() throws an exception */ - } - if ((lookup = zend_lookup_class(Z_STR_P(arg))) == NULL) { - *pce = NULL; - } else { - *pce = lookup; + /* Only accept string and Stringable(?) as int/foat/bool are not valid class names */ + if (UNEXPECTED(Z_TYPE_P(arg) != IS_STRING)) { + if (Z_TYPE_P(arg) != IS_OBJECT || !zend_parse_arg_str_slow(arg, arg_num)) { + *pce = NULL; + /* __toString may throw */ + if (!EG(exception)) { + zend_spprintf(error, 0, "must be a valid class name%s, %s given", + check_null ? " or null" : "", zend_zval_value_name(arg)); + } + *pce = NULL; + return ""; + } + /* Object was converted to string */ + ZEND_ASSERT(Z_TYPE_P(arg) == IS_STRING); } + zend_string *class_name = Z_STR_P(arg); + + *pce = zend_lookup_class(class_name); if (ce_base) { if ((!*pce || !instanceof_function(*pce, ce_base))) { - zend_spprintf(error, 0, "must be a class name derived from %s%s, %s given", + zend_spprintf(error, 0, "must be a class name derived from %s%s, \"%s\" given", ZSTR_VAL(ce_base->name), check_null ? " or null" : "", Z_STRVAL_P(arg)); *pce = NULL; return ""; } } if (!*pce) { - zend_spprintf(error, 0, "must be a valid class name%s, %s given", + zend_spprintf(error, 0, "must be a valid class name%s, \"%s\" given", check_null ? " or null" : "", Z_STRVAL_P(arg)); return ""; } diff --git a/Zend/zend_API.h b/Zend/zend_API.h index f52f7aecb2b1..da871e1eb390 100644 --- a/Zend/zend_API.h +++ b/Zend/zend_API.h @@ -1569,6 +1569,8 @@ static zend_always_inline zval *zend_try_array_init(zval *zv) _(Z_EXPECTED_ARRAY_OR_STRING_OR_NULL, "of type array|string|null") \ _(Z_EXPECTED_STRING_OR_LONG, "of type string|int") \ _(Z_EXPECTED_STRING_OR_LONG_OR_NULL, "of type string|int|null") \ + _(Z_EXPECTED_CLASS_NAME, "a valid class name") \ + _(Z_EXPECTED_CLASS_NAME_OR_NULL, "a valid class name or null") \ _(Z_EXPECTED_OBJECT_OR_CLASS_NAME, "an object or a valid class name") \ _(Z_EXPECTED_OBJECT_OR_CLASS_NAME_OR_NULL, "an object, a valid class name, or null") \ _(Z_EXPECTED_OBJECT_OR_STRING, "of type object|string") \ diff --git a/ext/dom/tests/modern/html/interactions/HTMLDocument_registerNodeClass_01.phpt b/ext/dom/tests/modern/html/interactions/HTMLDocument_registerNodeClass_01.phpt index 91604c5fab82..311fbd36039f 100644 --- a/ext/dom/tests/modern/html/interactions/HTMLDocument_registerNodeClass_01.phpt +++ b/ext/dom/tests/modern/html/interactions/HTMLDocument_registerNodeClass_01.phpt @@ -10,7 +10,7 @@ $dom->registerNodeClass("Dom\\HTMLDocument", "DOMDocument"); ?> --EXPECTF-- -Fatal error: Uncaught TypeError: DOMDocument::registerNodeClass(): Argument #1 ($baseClass) must be a class name derived from DOMNode, Dom\HTMLDocument given in %s:%d +Fatal error: Uncaught TypeError: DOMDocument::registerNodeClass(): Argument #1 ($baseClass) must be a class name derived from DOMNode, "Dom\HTMLDocument" given in %s:%d Stack trace: #0 %s(%d): DOMDocument->registerNodeClass('Dom\\HTMLDocumen...', 'DOMDocument') #1 {main} diff --git a/ext/mysqli/tests/mysqli_fetch_object.phpt b/ext/mysqli/tests/mysqli_fetch_object.phpt index 28e945db52f6..8077c6ca89fa 100644 --- a/ext/mysqli/tests/mysqli_fetch_object.phpt +++ b/ext/mysqli/tests/mysqli_fetch_object.phpt @@ -146,5 +146,5 @@ NULL NULL mysqli_result object is already closed TypeError: mysqli_fetch_object(): Argument #3 ($constructor_args) must be of type array, string given -TypeError: mysqli_fetch_object(): Argument #2 ($class) must be a valid class name, this_class_does_not_exist given +TypeError: mysqli_fetch_object(): Argument #2 ($class) must be a valid class name, "this_class_does_not_exist" given done! diff --git a/ext/mysqli/tests/mysqli_fetch_object_oo.phpt b/ext/mysqli/tests/mysqli_fetch_object_oo.phpt index b7b2c7812a96..20dd8296d3b6 100644 --- a/ext/mysqli/tests/mysqli_fetch_object_oo.phpt +++ b/ext/mysqli/tests/mysqli_fetch_object_oo.phpt @@ -116,12 +116,12 @@ require_once 'skipifconnectfailure.inc'; require_once 'clean_table.inc'; ?> --EXPECT-- -Error: Object of class mysqli could not be converted to string +TypeError: mysqli_result::fetch_object(): Argument #1 ($class) must be a valid class name, mysqli given ArgumentCountError: mysqli_result::fetch_object() expects at most 2 arguments, 3 given TypeError: mysqli_result::fetch_object(): Argument #2 ($constructor_args) must be of type array, null given ArgumentCountError: Too few arguments to function mysqli_fetch_object_construct::__construct(), 1 passed and exactly 2 expected NULL NULL Error: mysqli_result object is already closed -TypeError: mysqli_result::fetch_object(): Argument #1 ($class) must be a valid class name, this_class_does_not_exist given +TypeError: mysqli_result::fetch_object(): Argument #1 ($class) must be a valid class name, "this_class_does_not_exist" given done! diff --git a/ext/pdo_mysql/tests/pdo_mysql_stmt_fetchobject.phpt b/ext/pdo_mysql/tests/pdo_mysql_stmt_fetchobject.phpt index 0690878bac09..006e7d9306fc 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_stmt_fetchobject.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_stmt_fetchobject.phpt @@ -117,5 +117,5 @@ object(myclass)#%d (4) { ["null"]=> NULL } -PDOStatement::fetchObject(): Argument #1 ($class) must be a valid class name, class_does_not_exist given +PDOStatement::fetchObject(): Argument #1 ($class) must be a valid class name or null, "class_does_not_exist" given done! diff --git a/ext/pgsql/tests/22pg_fetch_object.phpt b/ext/pgsql/tests/22pg_fetch_object.phpt index 939a3adb3505..d857295e5834 100644 --- a/ext/pgsql/tests/22pg_fetch_object.phpt +++ b/ext/pgsql/tests/22pg_fetch_object.phpt @@ -53,5 +53,5 @@ object(test_class)#%d (3) { ["bin"]=> NULL } -pg_fetch_object(): Argument #3 ($class) must be a valid class name, does_not_exist given +pg_fetch_object(): Argument #3 ($class) must be a valid class name, "does_not_exist" given Ok diff --git a/ext/phar/tests/phar_oo_006.phpt b/ext/phar/tests/phar_oo_006.phpt index 627da36d5bc9..c4c99a1a2839 100644 --- a/ext/phar/tests/phar_oo_006.phpt +++ b/ext/phar/tests/phar_oo_006.phpt @@ -40,7 +40,7 @@ unlink(__DIR__ . '/files/phar_oo_006.phar.php'); __halt_compiler(); ?> --EXPECTF-- -TypeError: SplFileInfo::setFileClass(): Argument #1 ($class) must be a class name derived from SplFileObject, SplFileInfo given +TypeError: SplFileInfo::setFileClass(): Argument #1 ($class) must be a class name derived from SplFileObject, "SplFileInfo" given MyFile::__construct(phar://%s/a.php) a.php MyFile::__construct(phar://%s/b/c.php) diff --git a/ext/spl/tests/ArrayObject/arrayObject___construct_error1.phpt b/ext/spl/tests/ArrayObject/arrayObject___construct_error1.phpt index 78660694d530..29500a5ca672 100644 --- a/ext/spl/tests/ArrayObject/arrayObject___construct_error1.phpt +++ b/ext/spl/tests/ArrayObject/arrayObject___construct_error1.phpt @@ -20,6 +20,6 @@ try { ?> --EXPECT-- Bad iterator type: -TypeError: ArrayObject::__construct(): Argument #3 ($iteratorClass) must be a class name derived from ArrayIterator, Exception given +TypeError: ArrayObject::__construct(): Argument #3 ($iteratorClass) must be a class name derived from ArrayIterator, "Exception" given Non-existent class: -TypeError: ArrayObject::__construct(): Argument #3 ($iteratorClass) must be a class name derived from ArrayIterator, nonExistentClassName given +TypeError: ArrayObject::__construct(): Argument #3 ($iteratorClass) must be a class name derived from ArrayIterator, "nonExistentClassName" given diff --git a/ext/spl/tests/ArrayObject/arrayObject_setIteratorClass_error1.phpt b/ext/spl/tests/ArrayObject/arrayObject_setIteratorClass_error1.phpt index 1eb8d17ca66c..d1257ab0a6b7 100644 --- a/ext/spl/tests/ArrayObject/arrayObject_setIteratorClass_error1.phpt +++ b/ext/spl/tests/ArrayObject/arrayObject_setIteratorClass_error1.phpt @@ -43,7 +43,7 @@ try { ?> --EXPECT-- -TypeError: ArrayObject::setIteratorClass(): Argument #1 ($iteratorClass) must be a class name derived from ArrayIterator, nonExistentClass given -TypeError: ArrayObject::setIteratorClass(): Argument #1 ($iteratorClass) must be a class name derived from ArrayIterator, stdClass given -TypeError: ArrayObject::__construct(): Argument #3 ($iteratorClass) must be a class name derived from ArrayIterator, nonExistentClass given -TypeError: ArrayObject::__construct(): Argument #3 ($iteratorClass) must be a class name derived from ArrayIterator, stdClass given +TypeError: ArrayObject::setIteratorClass(): Argument #1 ($iteratorClass) must be a class name derived from ArrayIterator, "nonExistentClass" given +TypeError: ArrayObject::setIteratorClass(): Argument #1 ($iteratorClass) must be a class name derived from ArrayIterator, "stdClass" given +TypeError: ArrayObject::__construct(): Argument #3 ($iteratorClass) must be a class name derived from ArrayIterator, "nonExistentClass" given +TypeError: ArrayObject::__construct(): Argument #3 ($iteratorClass) must be a class name derived from ArrayIterator, "stdClass" given diff --git a/ext/spl/tests/SplFileInfo_setFileClass_error.phpt b/ext/spl/tests/SplFileInfo_setFileClass_error.phpt index 96d4e5eddefa..91ffd5664c7b 100644 --- a/ext/spl/tests/SplFileInfo_setFileClass_error.phpt +++ b/ext/spl/tests/SplFileInfo_setFileClass_error.phpt @@ -13,4 +13,4 @@ try { ?> --EXPECT-- -TypeError: SplFileInfo::setFileClass(): Argument #1 ($class) must be a class name derived from SplFileObject, stdClass given +TypeError: SplFileInfo::setFileClass(): Argument #1 ($class) must be a class name derived from SplFileObject, "stdClass" given diff --git a/ext/spl/tests/SplFileInfo_setInfoClass_error.phpt b/ext/spl/tests/SplFileInfo_setInfoClass_error.phpt index 10b568bc027f..d1d465a0432e 100644 --- a/ext/spl/tests/SplFileInfo_setInfoClass_error.phpt +++ b/ext/spl/tests/SplFileInfo_setInfoClass_error.phpt @@ -13,4 +13,4 @@ try { ?> --EXPECT-- -TypeError: SplFileInfo::setInfoClass(): Argument #1 ($class) must be a class name derived from SplFileInfo, stdClass given +TypeError: SplFileInfo::setInfoClass(): Argument #1 ($class) must be a class name derived from SplFileInfo, "stdClass" given diff --git a/ext/spl/tests/bug80719.phpt b/ext/spl/tests/bug80719.phpt index e0d7282fae38..b13ec633f678 100644 --- a/ext/spl/tests/bug80719.phpt +++ b/ext/spl/tests/bug80719.phpt @@ -15,5 +15,5 @@ foreach ($array as $v) { ?> --EXPECT-- -TypeError: ArrayObject::setIteratorClass(): Argument #1 ($iteratorClass) must be a class name derived from ArrayIterator, FilterIterator given +TypeError: ArrayObject::setIteratorClass(): Argument #1 ($iteratorClass) must be a class name derived from ArrayIterator, "FilterIterator" given int(42) diff --git a/ext/standard/tests/class_object/get_class_methods_basic_001.phpt b/ext/standard/tests/class_object/get_class_methods_basic_001.phpt index bee28f54422d..fdfaf232ee00 100644 --- a/ext/standard/tests/class_object/get_class_methods_basic_001.phpt +++ b/ext/standard/tests/class_object/get_class_methods_basic_001.phpt @@ -57,5 +57,5 @@ Argument is name of class which has no methods: array(0) { } Argument is non existent class: -get_class_methods(): Argument #1 ($object_or_class) must be an object or a valid class name, string given +get_class_methods(): Argument #1 ($object_or_class) must be an object or a valid class name, "NonExistent" given Done diff --git a/ext/standard/tests/class_object/get_class_methods_variation_001.phpt b/ext/standard/tests/class_object/get_class_methods_variation_001.phpt deleted file mode 100644 index f7b86a2977ac..000000000000 --- a/ext/standard/tests/class_object/get_class_methods_variation_001.phpt +++ /dev/null @@ -1,172 +0,0 @@ ---TEST-- -Test get_class_methods() function : usage variations - unexpected types ---FILE-- - 'red', 'item' => 'pen'), - - // null data - NULL, - null, - - // boolean data - true, - false, - TRUE, - FALSE, - - // empty data - "", - '', - - // string data - "string", - 'string', - - // object data - new stdclass(), - - // undefined data - $undefined_var, - - // unset data - $unset_var, -); - -// loop through each element of the array for class - -foreach($values as $value) { - echo "\nArg value " . (is_object($value) ? get_class($value) : $value) . "\n"; - try { - var_dump( get_class_methods($value) ); - } catch (TypeError $exception) { - echo $exception->getMessage() . "\n"; - } -} -echo "Done"; -?> ---EXPECT-- -*** Testing get_class_methods() : usage variations *** -Error: 2 - Undefined variable $undefined_var -Error: 2 - Undefined variable $unset_var - -Arg value 0 -get_class_methods(): Argument #1 ($object_or_class) must be an object or a valid class name, int given - -Arg value 1 -get_class_methods(): Argument #1 ($object_or_class) must be an object or a valid class name, int given - -Arg value 12345 -get_class_methods(): Argument #1 ($object_or_class) must be an object or a valid class name, int given - -Arg value -2345 -get_class_methods(): Argument #1 ($object_or_class) must be an object or a valid class name, int given - -Arg value 10.5 -get_class_methods(): Argument #1 ($object_or_class) must be an object or a valid class name, float given - -Arg value -10.5 -get_class_methods(): Argument #1 ($object_or_class) must be an object or a valid class name, float given - -Arg value 101234567000 -get_class_methods(): Argument #1 ($object_or_class) must be an object or a valid class name, float given - -Arg value 1.07654321E-9 -get_class_methods(): Argument #1 ($object_or_class) must be an object or a valid class name, float given - -Arg value 0.5 -get_class_methods(): Argument #1 ($object_or_class) must be an object or a valid class name, float given -Error: 2 - Array to string conversion - -Arg value Array -get_class_methods(): Argument #1 ($object_or_class) must be an object or a valid class name, array given -Error: 2 - Array to string conversion - -Arg value Array -get_class_methods(): Argument #1 ($object_or_class) must be an object or a valid class name, array given -Error: 2 - Array to string conversion - -Arg value Array -get_class_methods(): Argument #1 ($object_or_class) must be an object or a valid class name, array given -Error: 2 - Array to string conversion - -Arg value Array -get_class_methods(): Argument #1 ($object_or_class) must be an object or a valid class name, array given -Error: 2 - Array to string conversion - -Arg value Array -get_class_methods(): Argument #1 ($object_or_class) must be an object or a valid class name, array given - -Arg value -get_class_methods(): Argument #1 ($object_or_class) must be an object or a valid class name, null given - -Arg value -get_class_methods(): Argument #1 ($object_or_class) must be an object or a valid class name, null given - -Arg value 1 -get_class_methods(): Argument #1 ($object_or_class) must be an object or a valid class name, true given - -Arg value -get_class_methods(): Argument #1 ($object_or_class) must be an object or a valid class name, false given - -Arg value 1 -get_class_methods(): Argument #1 ($object_or_class) must be an object or a valid class name, true given - -Arg value -get_class_methods(): Argument #1 ($object_or_class) must be an object or a valid class name, false given - -Arg value -get_class_methods(): Argument #1 ($object_or_class) must be an object or a valid class name, string given - -Arg value -get_class_methods(): Argument #1 ($object_or_class) must be an object or a valid class name, string given - -Arg value string -get_class_methods(): Argument #1 ($object_or_class) must be an object or a valid class name, string given - -Arg value string -get_class_methods(): Argument #1 ($object_or_class) must be an object or a valid class name, string given - -Arg value stdClass -array(0) { -} - -Arg value -get_class_methods(): Argument #1 ($object_or_class) must be an object or a valid class name, null given - -Arg value -get_class_methods(): Argument #1 ($object_or_class) must be an object or a valid class name, null given -Done diff --git a/ext/standard/tests/class_object/get_parent_class_variation_002.phpt b/ext/standard/tests/class_object/get_parent_class_variation_002.phpt deleted file mode 100644 index 8faeff9dd8dc..000000000000 --- a/ext/standard/tests/class_object/get_parent_class_variation_002.phpt +++ /dev/null @@ -1,176 +0,0 @@ ---TEST-- -Test get_parent_class() function : usage variations - unexpected argument type. ---FILE-- - 'red', 'item' => 'pen'), - - // null data - NULL, - null, - - // boolean data - true, - false, - TRUE, - FALSE, - - // empty data - "", - '', - - // string data - "string", - 'String', - - // object data - new stdclass(), - - // undefined data - $undefined_var, - - // unset data - $unset_var, -); - -// loop through each element of the array for object - -foreach ($values as $value) { - echo "\nArg value " . (is_object($value) ? get_class($value) : $value) . "\n"; - try { - var_dump(get_parent_class($value)); - } catch (TypeError $exception) { - echo $exception->getMessage() . "\n"; - } -} - -echo "Done"; -?> ---EXPECT-- -*** Testing get_parent_class() : usage variations *** -Error: 2 - Undefined variable $undefined_var -Error: 2 - Undefined variable $unset_var - -Arg value 0 -get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, int given - -Arg value 1 -get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, int given - -Arg value 12345 -get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, int given - -Arg value -2345 -get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, int given - -Arg value 10.5 -get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, float given - -Arg value -10.5 -get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, float given - -Arg value 101234567000 -get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, float given - -Arg value 1.07654321E-9 -get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, float given - -Arg value 0.5 -get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, float given -Error: 2 - Array to string conversion - -Arg value Array -get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, array given -Error: 2 - Array to string conversion - -Arg value Array -get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, array given -Error: 2 - Array to string conversion - -Arg value Array -get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, array given -Error: 2 - Array to string conversion - -Arg value Array -get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, array given -Error: 2 - Array to string conversion - -Arg value Array -get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, array given - -Arg value -get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, null given - -Arg value -get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, null given - -Arg value 1 -get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, true given - -Arg value -get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, false given - -Arg value 1 -get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, true given - -Arg value -get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, false given - -Arg value -get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, string given - -Arg value -get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, string given - -Arg value string -In autoload(string) -get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, string given - -Arg value String -In autoload(String) -get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, string given - -Arg value stdClass -bool(false) - -Arg value -get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, null given - -Arg value -get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, null given -Done diff --git a/ext/standard/tests/file/userstreams.phpt b/ext/standard/tests/file/userstreams.phpt index d159b9612dbe..6ed35e1871f1 100644 --- a/ext/standard/tests/file/userstreams.phpt +++ b/ext/standard/tests/file/userstreams.phpt @@ -319,7 +319,7 @@ echo $data . "\n"; ?> --EXPECT-- -stream_wrapper_register(): Argument #2 ($class) must be a valid class name, class_not_exist given +stream_wrapper_register(): Argument #2 ($class) must be a valid class name, "class_not_exist" given Not Registered Registered Registered diff --git a/ext/standard/tests/filters/001.phpt b/ext/standard/tests/filters/001.phpt index 0a91b7213445..6da55d2f005b 100644 --- a/ext/standard/tests/filters/001.phpt +++ b/ext/standard/tests/filters/001.phpt @@ -14,16 +14,9 @@ try { echo $e::class, ': ', $e->getMessage(), PHP_EOL; } -try { - var_dump(stream_filter_register("------", "nonexistentclass")); -} catch (Throwable $e) { - echo $e::class, ': ', $e->getMessage(), PHP_EOL; -} - echo "Done\n"; ?> --EXPECT-- ValueError: stream_filter_register(): Argument #1 ($filter_name) must be a non-empty string ValueError: stream_filter_register(): Argument #2 ($class) must be a concrete class -TypeError: stream_filter_register(): Argument #2 ($class) must be a valid class name, nonexistentclass given Done diff --git a/ext/standard/tests/filters/stream_filter_register_non_existing_class.phpt b/ext/standard/tests/filters/stream_filter_register_non_existing_class.phpt index b404d45524b6..9a024deb9c12 100644 --- a/ext/standard/tests/filters/stream_filter_register_non_existing_class.phpt +++ b/ext/standard/tests/filters/stream_filter_register_non_existing_class.phpt @@ -16,7 +16,7 @@ var_dump($out); ?> --EXPECTF-- -TypeError: stream_filter_register(): Argument #2 ($class) must be a valid class name, not_existing given +TypeError: stream_filter_register(): Argument #2 ($class) must be a valid class name, "not_existing" given Warning: stream_filter_append(): Unable to locate filter "not_existing_filter" in %s on line %d Hello diff --git a/ext/xsl/tests/transformToDoc_class_exceptions.phpt b/ext/xsl/tests/transformToDoc_class_exceptions.phpt index 566d8711baa4..5cdcc2e1fb4a 100644 --- a/ext/xsl/tests/transformToDoc_class_exceptions.phpt +++ b/ext/xsl/tests/transformToDoc_class_exceptions.phpt @@ -28,5 +28,5 @@ try { ?> --EXPECT-- -XSLTProcessor::transformToDoc(): Argument #2 ($returnClass) must be a valid class name or null, NonExistent given +XSLTProcessor::transformToDoc(): Argument #2 ($returnClass) must be a valid class name or null, "NonExistent" given XSLTProcessor::transformToDoc(): Argument #2 ($returnClass) must be a class name compatible with SimpleXMLElement, DOMDocument given From 3a710fa7cb85d14e7296fea02a043536b4aa2eee Mon Sep 17 00:00:00 2001 From: Louis-Arnaud Date: Fri, 21 Aug 2026 15:59:42 +0200 Subject: [PATCH 3/3] ext/zip: declare true as the return type of zip_entry_close() (#23395) The function has two exits: RETURN_THROWS for a bad parameter or a stale resource, and an unconditional RETURN_TRUE after closing the entry. Nothing returns false. --- ext/zip/php_zip.stub.php | 2 +- ext/zip/php_zip_arginfo.h | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ext/zip/php_zip.stub.php b/ext/zip/php_zip.stub.php index 2cece2791d1b..60fc47abfcfc 100644 --- a/ext/zip/php_zip.stub.php +++ b/ext/zip/php_zip.stub.php @@ -32,7 +32,7 @@ function zip_entry_open($zip_dp, $zip_entry, string $mode = "rb"): bool {} * @param resource $zip_entry */ #[\Deprecated(since: '8.0')] -function zip_entry_close($zip_entry): bool {} +function zip_entry_close($zip_entry): true {} /** * @param resource $zip_entry diff --git a/ext/zip/php_zip_arginfo.h b/ext/zip/php_zip_arginfo.h index 4f8366dc1512..2496670158da 100644 --- a/ext/zip/php_zip_arginfo.h +++ b/ext/zip/php_zip_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit php_zip.stub.php instead. - * Stub hash: 206d9be6640ee7e94d68d7e075ab61bf3188cab3 */ + * Stub hash: 8f2b42d73dd8ff8729ddeff8396fa6d563eb13cb */ ZEND_BEGIN_ARG_INFO_EX(arginfo_zip_open, 0, 0, 1) ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) @@ -19,7 +19,7 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_zip_entry_open, 0, 2, _IS_BOOL, ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_STRING, 0, "\"rb\"") ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_zip_entry_close, 0, 1, _IS_BOOL, 0) +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_zip_entry_close, 0, 1, IS_TRUE, 0) ZEND_ARG_INFO(0, zip_entry) ZEND_END_ARG_INFO()