From 9908c52859c9ae49fec2c66db822a44b20277ad4 Mon Sep 17 00:00:00 2001 From: Gina Peter Banyard Date: Tue, 18 Aug 2026 21:40:34 +0100 Subject: [PATCH 1/4] Zend: normalise behaviour around class name ZPP specifier --- ...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 | 57 +++-- Zend/zend_API.h | 2 + 6 files changed, 236 insertions(+), 235 deletions(-) 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..862fedd0b6ee 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,37 @@ 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)) { + zend_spprintf(error, 0, "must be a valid class name%s, %s given", + check_null ? " or null" : "", zend_zval_value_name(arg)); + 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") \ From c891cc94d00d12307e1dd8caf5849c9be1bd2162 Mon Sep 17 00:00:00 2001 From: Gina Peter Banyard Date: Wed, 19 Aug 2026 01:27:06 +0100 Subject: [PATCH 2/4] Do not emit error if there is an exception already --- Zend/zend_API.c | 9 +- .../get_class_methods_variation_001.phpt | 172 ----------------- .../get_parent_class_variation_002.phpt | 176 ------------------ 3 files changed, 7 insertions(+), 350 deletions(-) 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/zend_API.c b/Zend/zend_API.c index 862fedd0b6ee..e36ca8d1cfe2 100644 --- a/Zend/zend_API.c +++ b/Zend/zend_API.c @@ -1046,8 +1046,13 @@ static const char *zend_parse_arg_impl(zval *arg, va_list *va, const char **spec /* 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)) { - zend_spprintf(error, 0, "must be a valid class name%s, %s given", - check_null ? " or null" : "", zend_zval_value_name(arg)); + *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 */ 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 From ec16ed7008c938370f0e785958f2cf650a9cf777 Mon Sep 17 00:00:00 2001 From: Gina Peter Banyard Date: Wed, 19 Aug 2026 01:27:17 +0100 Subject: [PATCH 3/4] Fix tests --- Zend/tests/bug70914.phpt | 2 +- Zend/tests/get_class_vars/get_class_vars_001.phpt | 2 +- Zend/tests/get_parent_class_basic.phpt | 6 +++--- .../interactions/HTMLDocument_registerNodeClass_01.phpt | 2 +- ext/mysqli/tests/mysqli_fetch_object.phpt | 2 +- ext/mysqli/tests/mysqli_fetch_object_oo.phpt | 2 +- ext/phar/tests/phar_oo_006.phpt | 2 +- .../tests/ArrayObject/arrayObject___construct_error1.phpt | 4 ++-- .../ArrayObject/arrayObject_setIteratorClass_error1.phpt | 8 ++++---- ext/spl/tests/SplFileInfo_setFileClass_error.phpt | 2 +- ext/spl/tests/SplFileInfo_setInfoClass_error.phpt | 2 +- ext/spl/tests/bug80719.phpt | 2 +- .../tests/class_object/get_class_methods_basic_001.phpt | 2 +- ext/standard/tests/file/userstreams.phpt | 2 +- ext/standard/tests/filters/001.phpt | 7 ------- .../stream_filter_register_non_existing_class.phpt | 2 +- ext/xsl/tests/transformToDoc_class_exceptions.phpt | 2 +- 17 files changed, 22 insertions(+), 29 deletions(-) diff --git a/Zend/tests/bug70914.phpt b/Zend/tests/bug70914.phpt index 73a43a5600dc..f9ae19e320a2 100644 --- a/Zend/tests/bug70914.phpt +++ b/Zend/tests/bug70914.phpt @@ -14,4 +14,4 @@ try { } ?> --EXPECT-- -PDOStatement::fetchObject(): Argument #1 ($class) must be a valid class name, %Z given +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/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..08e8f192c4be 100644 --- a/ext/mysqli/tests/mysqli_fetch_object_oo.phpt +++ b/ext/mysqli/tests/mysqli_fetch_object_oo.phpt @@ -123,5 +123,5 @@ ArgumentCountError: Too few arguments to function mysqli_fetch_object_construct: 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/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/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 8b5a309d0c5cced33063f740ec2fd10bd22f5227 Mon Sep 17 00:00:00 2001 From: Gina Peter Banyard Date: Wed, 19 Aug 2026 14:34:09 +0100 Subject: [PATCH 4/4] fix and move test --- Zend/tests/bug70914.phpt | 17 ----------------- Zend/tests/zpp/bug70914.phpt | 15 +++++++++++++++ 2 files changed, 15 insertions(+), 17 deletions(-) delete mode 100644 Zend/tests/bug70914.phpt create mode 100644 Zend/tests/zpp/bug70914.phpt diff --git a/Zend/tests/bug70914.phpt b/Zend/tests/bug70914.phpt deleted file mode 100644 index f9ae19e320a2..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/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