From 9e7b39bb12ad69a8926955478f6c1f268d4d09f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1t=C3=A9=20Kocsis?= Date: Sun, 12 Jul 2020 12:40:37 +0200 Subject: [PATCH 1/4] Cleanup argument handling of Zend functions and methods --- Zend/tests/001.phpt | 15 +++-- Zend/tests/002.phpt | 24 +++---- Zend/tests/004.phpt | 2 +- Zend/tests/006.phpt | 2 +- Zend/tests/008.phpt | 9 ++- Zend/tests/020.phpt | 2 +- Zend/tests/bug37811.phpt | 28 ++++---- Zend/tests/bug44827.phpt | 22 +++++-- Zend/tests/bug72162.phpt | 15 +++-- Zend/tests/class_alias_006.phpt | 10 ++- Zend/tests/closure_040.phpt | 1 + Zend/tests/constant_arrays.phpt | 21 +++--- Zend/tests/constants_002.phpt | 11 +++- Zend/zend_builtin_functions.c | 65 +++++++++---------- Zend/zend_builtin_functions.stub.php | 46 +++++++------ Zend/zend_builtin_functions_arginfo.h | 46 ++++++------- Zend/zend_closures.stub.php | 16 +++-- Zend/zend_closures_arginfo.h | 16 ++--- .../tests/general_functions/bug41970.phpt | 4 +- ext/standard/tests/strings/bug36944.phpt | 4 +- .../tests/strings/strncasecmp_error.phpt | 2 +- ext/standard/tests/strings/strncmp_error.phpt | 2 +- tests/lang/bug44827.phpt | 12 +++- tests/lang/func_get_arg.004.phpt | 2 +- tests/lang/func_get_arg_variation.phpt | 4 +- tests/lang/func_num_args.003.phpt | 11 ++-- 26 files changed, 221 insertions(+), 171 deletions(-) diff --git a/Zend/tests/001.phpt b/Zend/tests/001.phpt index d041d20a3b4a4..0e27b48d65012 100644 --- a/Zend/tests/001.phpt +++ b/Zend/tests/001.phpt @@ -40,20 +40,23 @@ class test { } test::test1(1); -var_dump(func_num_args()); + +try { + func_num_args(); +} catch (Error $exception) { + echo $exception->getMessage() . "\n"; +} echo "Done\n"; ?> --EXPECTF-- int(0) int(1) -Exception: Too few arguments to function test2(), 0 passed in %s001.php on line 18 and exactly 1 expected +Exception: Too few arguments to function test2(), 0 passed in %s on line %d and exactly 1 expected int(2) int(0) -Exception: Too few arguments to function test3(), 1 passed in %s001.php on line 27 and exactly 2 expected +Exception: Too few arguments to function test3(), 1 passed in %s on line %d and exactly 2 expected int(2) int(1) - -Warning: func_num_args(): Called from the global scope - no function context in %s on line %d -int(-1) +func_num_args() must be called from a function context Done diff --git a/Zend/tests/002.phpt b/Zend/tests/002.phpt index 80057bfa53e3c..c90ae4efc823d 100644 --- a/Zend/tests/002.phpt +++ b/Zend/tests/002.phpt @@ -96,26 +96,26 @@ try { echo "Done\n"; ?> --EXPECTF-- -func_get_arg(): Argument #1 ($arg_num) must be greater than or equal to 0 -func_get_arg(): Argument 0 not passed to function -func_get_arg(): Argument 1 not passed to function -func_get_arg(): Argument #1 ($arg_num) must be greater than or equal to 0 +func_get_arg(): Argument #1 ($argument_number) must be greater than or equal to 0 +func_get_arg(): Argument #1 ($argument_number) must be less than the number of the arguments passed to the currently executed function +func_get_arg(): Argument #1 ($argument_number) must be less than the number of the arguments passed to the currently executed function +func_get_arg(): Argument #1 ($argument_number) must be greater than or equal to 0 int(10) -func_get_arg(): Argument 1 not passed to function +func_get_arg(): Argument #1 ($argument_number) must be less than the number of the arguments passed to the currently executed function int(1) -func_get_arg(): Argument 1 not passed to function +func_get_arg(): Argument #1 ($argument_number) must be less than the number of the arguments passed to the currently executed function Exception: Too few arguments to function test2(), 0 passed in %s002.php on line %d and exactly 1 expected int(1) int(2) -func_get_arg(): Argument 2 not passed to function -func_get_arg(): Argument #1 ($arg_num) must be greater than or equal to 0 -func_get_arg(): Argument 0 not passed to function -func_get_arg(): Argument 1 not passed to function +func_get_arg(): Argument #1 ($argument_number) must be less than the number of the arguments passed to the currently executed function +func_get_arg(): Argument #1 ($argument_number) must be greater than or equal to 0 +func_get_arg(): Argument #1 ($argument_number) must be less than the number of the arguments passed to the currently executed function +func_get_arg(): Argument #1 ($argument_number) must be less than the number of the arguments passed to the currently executed function Exception: Too few arguments to function test3(), 1 passed in %s on line %d and exactly 2 expected int(1) int(2) -func_get_arg(): Argument 2 not passed to function +func_get_arg(): Argument #1 ($argument_number) must be less than the number of the arguments passed to the currently executed function int(1) -func_get_arg(): Argument 1 not passed to function +func_get_arg(): Argument #1 ($argument_number) must be less than the number of the arguments passed to the currently executed function func_get_arg() cannot be called from the global scope Done diff --git a/Zend/tests/004.phpt b/Zend/tests/004.phpt index b5b476cc1beea..bb40946f240ab 100644 --- a/Zend/tests/004.phpt +++ b/Zend/tests/004.phpt @@ -16,7 +16,7 @@ var_dump(strncmp("qwerty", "qwerty123", 7)); ?> --EXPECT-- int(0) -strncmp(): Argument #3 ($len) must be greater than or equal to 0 +strncmp(): Argument #3 ($length) must be greater than or equal to 0 int(0) int(0) int(-1) diff --git a/Zend/tests/006.phpt b/Zend/tests/006.phpt index 3377e933ce2af..ee6b56704020d 100644 --- a/Zend/tests/006.phpt +++ b/Zend/tests/006.phpt @@ -19,7 +19,7 @@ var_dump(strncasecmp("01", "01", 1000)); ?> --EXPECT-- -strncasecmp(): Argument #3 ($len) must be greater than or equal to 0 +strncasecmp(): Argument #3 ($length) must be greater than or equal to 0 int(0) int(-3) int(0) diff --git a/Zend/tests/008.phpt b/Zend/tests/008.phpt index b53578dbb35ef..7124059b6f333 100644 --- a/Zend/tests/008.phpt +++ b/Zend/tests/008.phpt @@ -16,7 +16,12 @@ var_dump(define("test const", 3)); var_dump(define("test const", 3)); var_dump(define("test", array(1))); var_dump(define("test1", fopen(__FILE__, 'r'))); + +try { var_dump(define("test2", new stdclass)); +} catch (TypeError $exception) { + echo $exception->getMessage() . "\n"; +} var_dump(constant(" ")); var_dump(constant("[[[")); @@ -37,9 +42,7 @@ Notice: Constant test const already defined in %s on line %d bool(false) bool(true) bool(true) - -Warning: Constants may only evaluate to scalar values, arrays or resources in %s on line %d -bool(false) +define(): Argument #2 ($value) must be of type bool|int|float|string|array|resource|null, stdClass given int(1) int(2) int(3) diff --git a/Zend/tests/020.phpt b/Zend/tests/020.phpt index 9e36037d8862f..e936dc43a56f9 100644 --- a/Zend/tests/020.phpt +++ b/Zend/tests/020.phpt @@ -26,4 +26,4 @@ try { ?> --EXPECT-- func_get_arg() cannot be called from the global scope -func_get_arg(): Argument 1 not passed to function +func_get_arg(): Argument #1 ($argument_number) must be less than the number of the arguments passed to the currently executed function diff --git a/Zend/tests/bug37811.phpt b/Zend/tests/bug37811.phpt index f3c2ee5e20d19..92a761817914d 100644 --- a/Zend/tests/bug37811.phpt +++ b/Zend/tests/bug37811.phpt @@ -11,19 +11,23 @@ class TestClass } } -define("Bar",new TestClass); +define("Bar", new TestClass); var_dump(Bar); -define("Baz",new stdClass); -var_dump(Baz); -?> -===DONE=== ---EXPECTF-- -string(3) "Foo" +try { + define("Baz", new stdClass); +} catch (TypeError $exception) { + echo $exception->getMessage() . "\n"; +} -Warning: Constants may only evaluate to scalar values, arrays or resources in %sbug37811.php on line %d +try { + var_dump(Baz); +} catch (Error $exception) { + echo $exception->getMessage() . "\n"; +} -Fatal error: Uncaught Error: Undefined constant "Baz" in %s:%d -Stack trace: -#0 {main} - thrown in %s on line %d +?> +--EXPECT-- +string(3) "Foo" +define(): Argument #2 ($value) must be of type bool|int|float|string|array|resource|null, stdClass given +Undefined constant "Baz" diff --git a/Zend/tests/bug44827.phpt b/Zend/tests/bug44827.phpt index a9f1d87d246c1..8e51087480bd7 100644 --- a/Zend/tests/bug44827.phpt +++ b/Zend/tests/bug44827.phpt @@ -2,10 +2,20 @@ Bug #44827 (define() allows :: in constant names) --FILE-- ---EXPECTF-- -Warning: Class constants cannot be defined or redefined in %sbug44827.php on line %d -Warning: Class constants cannot be defined or redefined in %sbug44827.php on line %d +try { + define('foo::bar', 1); +} catch (ValueError $exception) { + echo $exception->getMessage() . "\n"; +} + +try { + define('::', 1); +} catch (ValueError $exception) { + echo $exception->getMessage() . "\n"; +} + +?> +--EXPECT-- +define(): Argument #1 ($constant_name) cannot be a class constant +define(): Argument #1 ($constant_name) cannot be a class constant diff --git a/Zend/tests/bug72162.phpt b/Zend/tests/bug72162.phpt index 44237038a12b8..721b0fc306804 100644 --- a/Zend/tests/bug72162.phpt +++ b/Zend/tests/bug72162.phpt @@ -4,11 +4,12 @@ Bug #72162 (use-after-free - error_reporting) getMessage() . "\n"; +} ?> ---EXPECTF-- -Fatal error: Uncaught Error: Object of class stdClass could not be converted to string in %s:%d -Stack trace: -#0 %s(%d): error_reporting(Object(stdClass)) -#1 {main} - thrown in %s on line %d +--EXPECT-- +error_reporting(): Argument #1 ($error_level) must be of type ?int, stdClass given diff --git a/Zend/tests/class_alias_006.phpt b/Zend/tests/class_alias_006.phpt index d14ad7c933565..39aad71759192 100644 --- a/Zend/tests/class_alias_006.phpt +++ b/Zend/tests/class_alias_006.phpt @@ -3,8 +3,12 @@ Testing creation of alias to an internal class --FILE-- getMessage() . "\n"; +} ?> ---EXPECTF-- -Warning: First argument of class_alias() must be a name of user defined class in %s on line %d +--EXPECT-- +class_alias(): Argument #1 ($original_class_name) must be a user-defined class name, internal class name given diff --git a/Zend/tests/closure_040.phpt b/Zend/tests/closure_040.phpt index 72d2fb95b8900..a18ae2640e018 100644 --- a/Zend/tests/closure_040.phpt +++ b/Zend/tests/closure_040.phpt @@ -25,6 +25,7 @@ $ca = $a->getIncrementor(); $cas = $a->getStaticIncrementor(); $ca->bindTo($a, array()); + $cas->bindTo($a, 'A'); ?> diff --git a/Zend/tests/constant_arrays.phpt b/Zend/tests/constant_arrays.phpt index 06d911328c5f6..0bc6d71687d0b 100644 --- a/Zend/tests/constant_arrays.phpt +++ b/Zend/tests/constant_arrays.phpt @@ -24,12 +24,21 @@ $y[0] = 3; var_dump($x, $y, QUX); // ensure objects not allowed in arrays -var_dump(define('ELEPHPANT', [new StdClass])); +try { + define('ELEPHPANT', [new StdClass]); +} catch (TypeError $exception) { + echo $exception->getMessage() . "\n"; +} // ensure recursion doesn't crash $recursive = []; $recursive[0] = &$recursive; -var_dump(define('RECURSION', $recursive)); + +try { + define('RECURSION', $recursive); +} catch (ValueError $exception) { + echo $exception->getMessage() . "\n"; +} --EXPECTF-- array(4) { [0]=> @@ -92,9 +101,5 @@ array(1) { [0]=> int(7) } - -Warning: Constants may only evaluate to scalar values, arrays or resources in %s on line %d -bool(false) - -Warning: Constants cannot be recursive arrays in %s on line %d -bool(false) +define(): Argument #2 ($value) must be of type bool|int|float|string|array|resource|null, stdClass given +define(): Argument #2 ($value) cannot be a recursive array diff --git a/Zend/tests/constants_002.phpt b/Zend/tests/constants_002.phpt index 345c1dd822ffb..2d653d3c0489a 100644 --- a/Zend/tests/constants_002.phpt +++ b/Zend/tests/constants_002.phpt @@ -3,7 +3,12 @@ Defining constants with non-scalar values --FILE-- getMessage() . "\n"; +} + try { var_dump(foo); } catch (Error $e) { @@ -14,7 +19,7 @@ define('foo', fopen(__FILE__, 'r')); var_dump(foo); ?> ---EXPECTF-- -Warning: Constants may only evaluate to scalar values, arrays or resources in %s on line %d +--EXPECT-- +define(): Argument #2 ($value) must be of type bool|int|float|string|array|resource|null, stdClass given Undefined constant "foo" resource(5) of type (stream) diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c index 69299615b46e2..6db946805e01b 100644 --- a/Zend/zend_builtin_functions.c +++ b/Zend/zend_builtin_functions.c @@ -155,8 +155,8 @@ ZEND_FUNCTION(func_num_args) ZEND_PARSE_PARAMETERS_NONE(); if (ZEND_CALL_INFO(ex) & ZEND_CALL_CODE) { - zend_error(E_WARNING, "func_num_args(): Called from the global scope - no function context"); - RETURN_LONG(-1); + zend_throw_error(NULL, "func_num_args() must be called from a function context"); + RETURN_THROWS(); } if (zend_forbid_dynamic_call("func_num_args()") == FAILURE) { @@ -197,7 +197,7 @@ ZEND_FUNCTION(func_get_arg) arg_count = ZEND_CALL_NUM_ARGS(ex); if ((zend_ulong)requested_offset >= arg_count) { - zend_throw_error(NULL, "func_get_arg(): Argument " ZEND_LONG_FMT " not passed to function", requested_offset); + zend_argument_value_error(1, "must be less than the number of the arguments passed to the currently executed function"); RETURN_THROWS(); } @@ -369,17 +369,19 @@ ZEND_FUNCTION(strncasecmp) /* {{{ Return the current error_reporting level, and if an argument was passed - change to the new level */ ZEND_FUNCTION(error_reporting) { - zval *err = NULL; + zend_long err; + zend_bool err_is_null = 1; int old_error_reporting; ZEND_PARSE_PARAMETERS_START(0, 1) Z_PARAM_OPTIONAL - Z_PARAM_ZVAL(err) + Z_PARAM_LONG_OR_NULL(err, err_is_null) ZEND_PARSE_PARAMETERS_END(); old_error_reporting = EG(error_reporting); - if (ZEND_NUM_ARGS() != 0) { - zend_string *new_val = zval_try_get_string(err); + + if (!err_is_null) { + zend_string *new_val = zend_long_to_str(err); if (UNEXPECTED(!new_val)) { RETURN_THROWS(); } @@ -410,11 +412,7 @@ ZEND_FUNCTION(error_reporting) } p->value = new_val; - if (Z_TYPE_P(err) == IS_LONG) { - EG(error_reporting) = Z_LVAL_P(err); - } else { - EG(error_reporting) = atoi(ZSTR_VAL(p->value)); - } + EG(error_reporting) = err; } while (0); } @@ -422,7 +420,7 @@ ZEND_FUNCTION(error_reporting) } /* }}} */ -static int validate_constant_array(HashTable *ht) /* {{{ */ +static int validate_constant_array_argument(HashTable *ht, int argument_number) /* {{{ */ { int ret = 1; zval *val; @@ -434,16 +432,18 @@ static int validate_constant_array(HashTable *ht) /* {{{ */ if (Z_TYPE_P(val) == IS_ARRAY) { if (Z_REFCOUNTED_P(val)) { if (Z_IS_RECURSIVE_P(val)) { - zend_error(E_WARNING, "Constants cannot be recursive arrays"); + zend_argument_value_error(argument_number, "cannot be a recursive array"); ret = 0; break; - } else if (!validate_constant_array(Z_ARRVAL_P(val))) { + } else if (!validate_constant_array_argument(Z_ARRVAL_P(val), argument_number)) { ret = 0; break; } } } else if (Z_TYPE_P(val) != IS_STRING && Z_TYPE_P(val) != IS_RESOURCE) { - zend_error(E_WARNING, "Constants may only evaluate to scalar values, arrays or resources"); + zend_argument_type_error(2, "must be of type bool|int|float|string|array|resource|null, %s given", + zend_zval_type_name(val) + ); ret = 0; break; } @@ -485,25 +485,16 @@ ZEND_FUNCTION(define) { zend_string *name; zval *val, val_free; - zend_bool non_cs = 0; zend_constant c; - ZEND_PARSE_PARAMETERS_START(2, 3) + ZEND_PARSE_PARAMETERS_START(2, 2) Z_PARAM_STR(name) Z_PARAM_ZVAL(val) - Z_PARAM_OPTIONAL - Z_PARAM_BOOL(non_cs) ZEND_PARSE_PARAMETERS_END(); if (zend_memnstr(ZSTR_VAL(name), "::", sizeof("::") - 1, ZSTR_VAL(name) + ZSTR_LEN(name))) { - zend_error(E_WARNING, "Class constants cannot be defined or redefined"); - RETURN_FALSE; - } - - if (non_cs) { - zend_error(E_WARNING, - "define(): Declaration of case-insensitive constants is no longer supported"); - RETURN_FALSE; + zend_argument_value_error(1, "cannot be a class constant"); + RETURN_THROWS(); } ZVAL_UNDEF(&val_free); @@ -519,8 +510,8 @@ ZEND_FUNCTION(define) break; case IS_ARRAY: if (Z_REFCOUNTED_P(val)) { - if (!validate_constant_array(Z_ARRVAL_P(val))) { - RETURN_FALSE; + if (!validate_constant_array_argument(Z_ARRVAL_P(val), 2)) { + RETURN_THROWS(); } else { copy_constant_array(&c.value, val); goto register_constant; @@ -534,9 +525,11 @@ ZEND_FUNCTION(define) } /* no break */ default: - zend_error(E_WARNING, "Constants may only evaluate to scalar values, arrays or resources"); zval_ptr_dtor(&val_free); - RETURN_FALSE; + zend_argument_type_error(2, "must be of type bool|int|float|string|array|resource|null, %s given", + zend_zval_type_name(val) + ); + RETURN_THROWS(); } ZVAL_COPY(&c.value, val); @@ -1120,8 +1113,8 @@ ZEND_FUNCTION(class_alias) RETURN_FALSE; } } else { - zend_error(E_WARNING, "First argument of class_alias() must be a name of user defined class"); - RETURN_FALSE; + zend_argument_value_error(1, "must be a user-defined class name, internal class name given"); + RETURN_THROWS(); } } else { zend_error(E_WARNING, "Class \"%s\" not found", ZSTR_VAL(class_name)); @@ -1436,7 +1429,7 @@ ZEND_FUNCTION(get_resources) zend_ulong index; zval *val; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "|S", &type) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "|S!", &type) == FAILURE) { RETURN_THROWS(); } @@ -1460,7 +1453,7 @@ ZEND_FUNCTION(get_resources) int id = zend_fetch_list_dtor_id(ZSTR_VAL(type)); if (id <= 0) { - zend_error(E_WARNING, "get_resources(): Unknown resource type '%s'", ZSTR_VAL(type)); + zend_error(E_WARNING, "get_resources(): Unknown resource type \"%s\"", ZSTR_VAL(type)); RETURN_FALSE; } diff --git a/Zend/zend_builtin_functions.stub.php b/Zend/zend_builtin_functions.stub.php index 8e1bb0b94cea5..7a20559493ae9 100644 --- a/Zend/zend_builtin_functions.stub.php +++ b/Zend/zend_builtin_functions.stub.php @@ -6,23 +6,24 @@ function zend_version(): string {} function func_num_args(): int {} -function func_get_arg(int $arg_num): mixed {} +function func_get_arg(int $argument_number): mixed {} function func_get_args(): array {} -function strlen(string $str): int {} +function strlen(string $string): int {} -function strcmp(string $str1, string $str2): int {} +function strcmp(string $string1, string $string2): int {} -function strncmp(string $str1, string $str2, int $len): int {} +function strncmp(string $string1, string $string2, int $length): int {} -function strcasecmp(string $str1, string $str2): int {} +function strcasecmp(string $string1, string $string2): int {} -function strncasecmp(string $str1, string $str2, int $len): int {} +function strncasecmp(string $string1, string $string2, int $length): int {} -function error_reporting($new_error_level = UNKNOWN): int {} +function error_reporting(?int $error_level = null): int {} -function define(string $constant_name, $value, bool $case_insensitive = false): bool {} +/** @param bool|int|float|string|array|resource|null $value */ +function define(string $constant_name, $value): bool {} function defined(string $constant_name): bool {} @@ -38,25 +39,28 @@ function is_a($object, string $class_name, bool $allow_string = false): bool {} function get_class_vars(string $class_name): array|false {} -function get_object_vars(object $obj): array {} +function get_object_vars(object $object): array {} -function get_mangled_object_vars(object $obj): array {} +function get_mangled_object_vars(object $object): array {} -function get_class_methods(string|object $class): array {} +/** string|object $class */ +function get_class_methods($class): array {} +/** @param object|string $object_or_class */ function method_exists($object_or_class, string $method): bool {} +/** @param object|string $object_or_class */ function property_exists($object_or_class, string $property_name): bool {} -function class_exists(string $classname, bool $autoload = true): bool {} +function class_exists(string $class_name, bool $autoload = true): bool {} -function interface_exists(string $classname, bool $autoload = true): bool {} +function interface_exists(string $interface_name, bool $autoload = true): bool {} -function trait_exists(string $traitname, bool $autoload = true): bool {} +function trait_exists(string $trait_name, bool $autoload = true): bool {} function function_exists(string $function_name): bool {} -function class_alias(string $user_class_name, string $alias_name, bool $autoload = true): bool {} +function class_alias(string $original_class_name, string $alias, bool $autoload = true): bool {} function get_included_files(): array {} @@ -88,11 +92,13 @@ function get_defined_functions(bool $exclude_disabled = true): array {} function get_defined_vars(): array {} -function get_resource_type($res): string {} +/** @param resource $resource */ +function get_resource_type($resource): string {} -function get_resource_id($res): int {} +/** @param resource $resource */ +function get_resource_id($resource): int {} -function get_resources(string $type = UNKNOWN): array {} +function get_resources(?string $type = null): array {} function get_loaded_extensions(bool $zend_extensions = false): array {} @@ -102,9 +108,9 @@ function debug_backtrace(int $options = DEBUG_BACKTRACE_PROVIDE_OBJECT, int $lim function debug_print_backtrace(int $options = 0, int $limit = 0): void {} -function extension_loaded(string $extension_name): bool {} +function extension_loaded(string $extension): bool {} -function get_extension_funcs(string $extension_name): array|false {} +function get_extension_funcs(string $extension): array|false {} #if ZEND_DEBUG && defined(ZTS) function zend_thread_id(): int {} diff --git a/Zend/zend_builtin_functions_arginfo.h b/Zend/zend_builtin_functions_arginfo.h index 1fa189410c791..e652f43131b3d 100644 --- a/Zend/zend_builtin_functions_arginfo.h +++ b/Zend/zend_builtin_functions_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 0d3c035fc2b9f0dcdbf6efe3c740d8aa3805ec32 */ + * Stub hash: 8f915bc6d966efc2520aa706b9d00c72ead1954d */ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_zend_version, 0, 0, IS_STRING, 0) ZEND_END_ARG_INFO() @@ -8,25 +8,25 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_func_num_args, 0, 0, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_func_get_arg, 0, 1, IS_MIXED, 0) - ZEND_ARG_TYPE_INFO(0, arg_num, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, argument_number, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_func_get_args, 0, 0, IS_ARRAY, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_strlen, 0, 1, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, str, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_strcmp, 0, 2, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, str1, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, str2, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, string1, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, string2, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_strncmp, 0, 3, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, str1, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, str2, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, len, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, string1, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, string2, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, length, IS_LONG, 0) ZEND_END_ARG_INFO() #define arginfo_strcasecmp arginfo_strcmp @@ -34,13 +34,12 @@ ZEND_END_ARG_INFO() #define arginfo_strncasecmp arginfo_strncmp ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_error_reporting, 0, 0, IS_LONG, 0) - ZEND_ARG_INFO(0, new_error_level) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, error_level, IS_LONG, 1, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_define, 0, 2, _IS_BOOL, 0) ZEND_ARG_TYPE_INFO(0, constant_name, IS_STRING, 0) ZEND_ARG_INFO(0, value) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, case_insensitive, _IS_BOOL, 0, "false") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_defined, 0, 1, _IS_BOOL, 0) @@ -74,13 +73,13 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_get_class_vars, 0, 1, MAY_BE_ARR ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_get_object_vars, 0, 1, IS_ARRAY, 0) - ZEND_ARG_TYPE_INFO(0, obj, IS_OBJECT, 0) + ZEND_ARG_TYPE_INFO(0, object, IS_OBJECT, 0) ZEND_END_ARG_INFO() #define arginfo_get_mangled_object_vars arginfo_get_object_vars ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_get_class_methods, 0, 1, IS_ARRAY, 0) - ZEND_ARG_TYPE_MASK(0, class, MAY_BE_STRING|MAY_BE_OBJECT, NULL) + ZEND_ARG_INFO(0, class) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_method_exists, 0, 2, _IS_BOOL, 0) @@ -94,14 +93,17 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_property_exists, 0, 2, _IS_BOOL, ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_exists, 0, 1, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO(0, classname, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, class_name, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, autoload, _IS_BOOL, 0, "true") ZEND_END_ARG_INFO() -#define arginfo_interface_exists arginfo_class_exists +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_interface_exists, 0, 1, _IS_BOOL, 0) + ZEND_ARG_TYPE_INFO(0, interface_name, IS_STRING, 0) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, autoload, _IS_BOOL, 0, "true") +ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_trait_exists, 0, 1, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO(0, traitname, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, trait_name, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, autoload, _IS_BOOL, 0, "true") ZEND_END_ARG_INFO() @@ -110,8 +112,8 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_function_exists, 0, 1, _IS_BOOL, ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_alias, 0, 2, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO(0, user_class_name, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, alias_name, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, original_class_name, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, alias, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, autoload, _IS_BOOL, 0, "true") ZEND_END_ARG_INFO() @@ -153,15 +155,15 @@ ZEND_END_ARG_INFO() #define arginfo_get_defined_vars arginfo_func_get_args ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_get_resource_type, 0, 1, IS_STRING, 0) - ZEND_ARG_INFO(0, res) + ZEND_ARG_INFO(0, resource) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_get_resource_id, 0, 1, IS_LONG, 0) - ZEND_ARG_INFO(0, res) + ZEND_ARG_INFO(0, resource) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_get_resources, 0, 0, IS_ARRAY, 0) - ZEND_ARG_TYPE_INFO(0, type, IS_STRING, 0) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, type, IS_STRING, 1, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_get_loaded_extensions, 0, 0, IS_ARRAY, 0) @@ -183,11 +185,11 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_debug_print_backtrace, 0, 0, IS_ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_extension_loaded, 0, 1, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO(0, extension_name, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, extension, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_get_extension_funcs, 0, 1, MAY_BE_ARRAY|MAY_BE_FALSE) - ZEND_ARG_TYPE_INFO(0, extension_name, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, extension, IS_STRING, 0) ZEND_END_ARG_INFO() #if ZEND_DEBUG && defined(ZTS) diff --git a/Zend/zend_closures.stub.php b/Zend/zend_closures.stub.php index 9cc298eee072a..65f5128e6484c 100644 --- a/Zend/zend_closures.stub.php +++ b/Zend/zend_closures.stub.php @@ -6,13 +6,17 @@ final class Closure { private function __construct() {} - public static function bind(Closure $closure, ?object $newthis, $newscope = UNKNOWN): ?Closure {} + /** @param object|string|null $newScope */ + public static function bind(Closure $closure, ?object $newThis, $newScope = UNKNOWN): ?Closure {} - /** @alias Closure::bind */ - public function bindTo(?object $newthis, $newscope = UNKNOWN): ?Closure {} + /** + * @param object|string|null $newScope + * @alias Closure::bind + */ + public function bindTo(?object $newThis, $newScope = UNKNOWN): ?Closure {} - public function call(object $newthis, mixed ...$parameters): mixed {} + public function call(object $newThis, mixed ...$arguments): mixed {} - /** @param callable $callable Not a proper type annotation due to bug #78770 */ - public static function fromCallable($callable): Closure {} + /** @param callable $callback Not a proper type annotation due to bug #78770 */ + public static function fromCallable($callback): Closure {} } diff --git a/Zend/zend_closures_arginfo.h b/Zend/zend_closures_arginfo.h index 14c262773196f..9e7e64708ce7b 100644 --- a/Zend/zend_closures_arginfo.h +++ b/Zend/zend_closures_arginfo.h @@ -1,27 +1,27 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 3352191f3a07009ef853829816a3209156afb0bc */ + * Stub hash: 57771cb65a3193bd683be75efd04f7daff0f8585 */ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Closure___construct, 0, 0, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Closure_bind, 0, 2, Closure, 1) ZEND_ARG_OBJ_INFO(0, closure, Closure, 0) - ZEND_ARG_TYPE_INFO(0, newthis, IS_OBJECT, 1) - ZEND_ARG_INFO(0, newscope) + ZEND_ARG_TYPE_INFO(0, newThis, IS_OBJECT, 1) + ZEND_ARG_INFO(0, newScope) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Closure_bindTo, 0, 1, Closure, 1) - ZEND_ARG_TYPE_INFO(0, newthis, IS_OBJECT, 1) - ZEND_ARG_INFO(0, newscope) + ZEND_ARG_TYPE_INFO(0, newThis, IS_OBJECT, 1) + ZEND_ARG_INFO(0, newScope) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Closure_call, 0, 1, IS_MIXED, 0) - ZEND_ARG_TYPE_INFO(0, newthis, IS_OBJECT, 0) - ZEND_ARG_VARIADIC_TYPE_INFO(0, parameters, IS_MIXED, 0) + ZEND_ARG_TYPE_INFO(0, newThis, IS_OBJECT, 0) + ZEND_ARG_VARIADIC_TYPE_INFO(0, arguments, IS_MIXED, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Closure_fromCallable, 0, 1, Closure, 0) - ZEND_ARG_INFO(0, callable) + ZEND_ARG_INFO(0, callback) ZEND_END_ARG_INFO() diff --git a/ext/standard/tests/general_functions/bug41970.phpt b/ext/standard/tests/general_functions/bug41970.phpt index 87401fdc67281..43569e47294c6 100644 --- a/ext/standard/tests/general_functions/bug41970.phpt +++ b/ext/standard/tests/general_functions/bug41970.phpt @@ -23,9 +23,9 @@ echo "Done\n"; --EXPECTF-- Warning: sort(): Argument #1 ($arg) must be passed by reference, value given in %s on line %d bool(true) -strlen(): Argument #1 ($str) must be of type string, array given +strlen(): Argument #1 ($string) must be of type string, array given Warning: sort(): Argument #1 ($arg) must be passed by reference, value given in %s on line %d bool(true) -strlen(): Argument #1 ($str) must be of type string, array given +strlen(): Argument #1 ($string) must be of type string, array given Done diff --git a/ext/standard/tests/strings/bug36944.phpt b/ext/standard/tests/strings/bug36944.phpt index 5e3ef4f0a0991..d775612498576 100644 --- a/ext/standard/tests/strings/bug36944.phpt +++ b/ext/standard/tests/strings/bug36944.phpt @@ -21,9 +21,9 @@ var_dump(strncasecmp("test ", "E", 0)); ?> --EXPECTF-- -strncmp(): Argument #3 ($len) must be greater than or equal to 0 +strncmp(): Argument #3 ($length) must be greater than or equal to 0 int(%d) int(0) -strncasecmp(): Argument #3 ($len) must be greater than or equal to 0 +strncasecmp(): Argument #3 ($length) must be greater than or equal to 0 int(%d) int(0) diff --git a/ext/standard/tests/strings/strncasecmp_error.phpt b/ext/standard/tests/strings/strncasecmp_error.phpt index 6b303c0607ef6..46bbdbe3b0e58 100644 --- a/ext/standard/tests/strings/strncasecmp_error.phpt +++ b/ext/standard/tests/strings/strncasecmp_error.phpt @@ -19,4 +19,4 @@ try { --EXPECT-- *** Testing strncasecmp() function: error conditions *** -- Testing strncasecmp() function with invalid argument -- -strncasecmp(): Argument #3 ($len) must be greater than or equal to 0 +strncasecmp(): Argument #3 ($length) must be greater than or equal to 0 diff --git a/ext/standard/tests/strings/strncmp_error.phpt b/ext/standard/tests/strings/strncmp_error.phpt index d5566a3f053d8..ed83651072c0c 100644 --- a/ext/standard/tests/strings/strncmp_error.phpt +++ b/ext/standard/tests/strings/strncmp_error.phpt @@ -20,4 +20,4 @@ try { ?> --EXPECT-- *** Testing strncmp() function: error conditions *** -strncmp(): Argument #3 ($len) must be greater than or equal to 0 +strncmp(): Argument #3 ($length) must be greater than or equal to 0 diff --git a/tests/lang/bug44827.phpt b/tests/lang/bug44827.phpt index 60ce81a4cee8d..9220439c884bd 100644 --- a/tests/lang/bug44827.phpt +++ b/tests/lang/bug44827.phpt @@ -6,14 +6,20 @@ sebs@php.net Testfest Munich 2009 --FILE-- getMessage(), "\n"; +} + +try { + constant('::'); } catch (Error $e) { echo $e->getMessage(), "\n"; } + ?> --EXPECTF-- -Warning: Class constants cannot be defined or redefined in %s on line %d +define(): Argument #1 ($constant_name) cannot be a class constant Fatal error: Class "" not found in %s on line %d diff --git a/tests/lang/func_get_arg.004.phpt b/tests/lang/func_get_arg.004.phpt index b215b1e51510a..8fe9a9062cfab 100644 --- a/tests/lang/func_get_arg.004.phpt +++ b/tests/lang/func_get_arg.004.phpt @@ -15,4 +15,4 @@ foo(2, 3); ?> --EXPECT-- -func_get_arg(): Argument 2 not passed to function +func_get_arg(): Argument #1 ($argument_number) must be less than the number of the arguments passed to the currently executed function diff --git a/tests/lang/func_get_arg_variation.phpt b/tests/lang/func_get_arg_variation.phpt index eb608ad0f06d8..f3a7516add744 100644 --- a/tests/lang/func_get_arg_variation.phpt +++ b/tests/lang/func_get_arg_variation.phpt @@ -22,5 +22,5 @@ foo(2); ?> --EXPECT-- -func_get_arg(): Argument #1 ($arg_num) must be greater than or equal to 0 -func_get_arg(): Argument 2 not passed to function +func_get_arg(): Argument #1 ($argument_number) must be greater than or equal to 0 +func_get_arg(): Argument #1 ($argument_number) must be less than the number of the arguments passed to the currently executed function diff --git a/tests/lang/func_num_args.003.phpt b/tests/lang/func_num_args.003.phpt index 1520c31ed4f1d..0d97109dcc593 100644 --- a/tests/lang/func_num_args.003.phpt +++ b/tests/lang/func_num_args.003.phpt @@ -3,9 +3,12 @@ func_num_args() outside of a function declaration --FILE-- getMessage() . "\n"; +} ?> ---EXPECTF-- -Warning: func_num_args(): Called from the global scope - no function context in %s on line %d -int(-1) +--EXPECT-- +func_num_args() must be called from a function context From bc1b63c556b3a3cd7e5148558c9871f46864aed5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1t=C3=A9=20Kocsis?= Date: Tue, 14 Jul 2020 12:08:06 +0200 Subject: [PATCH 2/4] Address review comments --- Zend/tests/008.phpt | 2 +- Zend/tests/bug37811.phpt | 2 +- Zend/tests/constant_arrays.phpt | 2 +- Zend/tests/constants_002.phpt | 2 +- Zend/zend_builtin_functions.c | 22 +++++++++++++--------- Zend/zend_builtin_functions.stub.php | 2 +- Zend/zend_builtin_functions_arginfo.h | 3 ++- 7 files changed, 20 insertions(+), 15 deletions(-) diff --git a/Zend/tests/008.phpt b/Zend/tests/008.phpt index 7124059b6f333..aa2dbb8d33a17 100644 --- a/Zend/tests/008.phpt +++ b/Zend/tests/008.phpt @@ -42,7 +42,7 @@ Notice: Constant test const already defined in %s on line %d bool(false) bool(true) bool(true) -define(): Argument #2 ($value) must be of type bool|int|float|string|array|resource|null, stdClass given +define(): Argument #2 ($value) cannot be an object, stdClass given int(1) int(2) int(3) diff --git a/Zend/tests/bug37811.phpt b/Zend/tests/bug37811.phpt index 92a761817914d..3e433a0da6d7e 100644 --- a/Zend/tests/bug37811.phpt +++ b/Zend/tests/bug37811.phpt @@ -29,5 +29,5 @@ try { ?> --EXPECT-- string(3) "Foo" -define(): Argument #2 ($value) must be of type bool|int|float|string|array|resource|null, stdClass given +define(): Argument #2 ($value) cannot be an object, stdClass given Undefined constant "Baz" diff --git a/Zend/tests/constant_arrays.phpt b/Zend/tests/constant_arrays.phpt index 0bc6d71687d0b..d439ff6922ca6 100644 --- a/Zend/tests/constant_arrays.phpt +++ b/Zend/tests/constant_arrays.phpt @@ -101,5 +101,5 @@ array(1) { [0]=> int(7) } -define(): Argument #2 ($value) must be of type bool|int|float|string|array|resource|null, stdClass given +define(): Argument #2 ($value) cannot be an object, stdClass given define(): Argument #2 ($value) cannot be a recursive array diff --git a/Zend/tests/constants_002.phpt b/Zend/tests/constants_002.phpt index 2d653d3c0489a..309b9c7f9c776 100644 --- a/Zend/tests/constants_002.phpt +++ b/Zend/tests/constants_002.phpt @@ -20,6 +20,6 @@ var_dump(foo); ?> --EXPECT-- -define(): Argument #2 ($value) must be of type bool|int|float|string|array|resource|null, stdClass given +define(): Argument #2 ($value) cannot be an object, stdClass given Undefined constant "foo" resource(5) of type (stream) diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c index 6db946805e01b..f04fbe9a6f8a2 100644 --- a/Zend/zend_builtin_functions.c +++ b/Zend/zend_builtin_functions.c @@ -441,9 +441,7 @@ static int validate_constant_array_argument(HashTable *ht, int argument_number) } } } else if (Z_TYPE_P(val) != IS_STRING && Z_TYPE_P(val) != IS_RESOURCE) { - zend_argument_type_error(2, "must be of type bool|int|float|string|array|resource|null, %s given", - zend_zval_type_name(val) - ); + zend_argument_type_error(argument_number, "cannot be an object, %s given", zend_zval_type_name(val)); ret = 0; break; } @@ -485,11 +483,14 @@ ZEND_FUNCTION(define) { zend_string *name; zval *val, val_free; + zend_bool non_cs = 0; zend_constant c; - ZEND_PARSE_PARAMETERS_START(2, 2) + ZEND_PARSE_PARAMETERS_START(2, 3) Z_PARAM_STR(name) Z_PARAM_ZVAL(val) + Z_PARAM_OPTIONAL + Z_PARAM_BOOL(non_cs) ZEND_PARSE_PARAMETERS_END(); if (zend_memnstr(ZSTR_VAL(name), "::", sizeof("::") - 1, ZSTR_VAL(name) + ZSTR_LEN(name))) { @@ -497,6 +498,11 @@ ZEND_FUNCTION(define) RETURN_THROWS(); } + if (non_cs) { + zend_error(E_WARNING, "define(): Declaration of case-insensitive constants is no longer supported"); + RETURN_FALSE; + } + ZVAL_UNDEF(&val_free); switch (Z_TYPE_P(val)) { @@ -526,9 +532,7 @@ ZEND_FUNCTION(define) /* no break */ default: zval_ptr_dtor(&val_free); - zend_argument_type_error(2, "must be of type bool|int|float|string|array|resource|null, %s given", - zend_zval_type_name(val) - ); + zend_argument_type_error(2, "cannot be an object, %s given", zend_zval_type_name(val)); RETURN_THROWS(); } @@ -1453,8 +1457,8 @@ ZEND_FUNCTION(get_resources) int id = zend_fetch_list_dtor_id(ZSTR_VAL(type)); if (id <= 0) { - zend_error(E_WARNING, "get_resources(): Unknown resource type \"%s\"", ZSTR_VAL(type)); - RETURN_FALSE; + zend_argument_value_error(1, "must be a valid resource type"); + RETURN_THROWS(); } array_init(return_value); diff --git a/Zend/zend_builtin_functions.stub.php b/Zend/zend_builtin_functions.stub.php index 7a20559493ae9..e5ef300b26769 100644 --- a/Zend/zend_builtin_functions.stub.php +++ b/Zend/zend_builtin_functions.stub.php @@ -23,7 +23,7 @@ function strncasecmp(string $string1, string $string2, int $length): int {} function error_reporting(?int $error_level = null): int {} /** @param bool|int|float|string|array|resource|null $value */ -function define(string $constant_name, $value): bool {} +function define(string $constant_name, $value, $case_insensitive = false): bool {} function defined(string $constant_name): bool {} diff --git a/Zend/zend_builtin_functions_arginfo.h b/Zend/zend_builtin_functions_arginfo.h index e652f43131b3d..208ebe494803d 100644 --- a/Zend/zend_builtin_functions_arginfo.h +++ b/Zend/zend_builtin_functions_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 8f915bc6d966efc2520aa706b9d00c72ead1954d */ + * Stub hash: 13ccb76ae84972dc12a26555e9d8652e58150378 */ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_zend_version, 0, 0, IS_STRING, 0) ZEND_END_ARG_INFO() @@ -40,6 +40,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_define, 0, 2, _IS_BOOL, 0) ZEND_ARG_TYPE_INFO(0, constant_name, IS_STRING, 0) ZEND_ARG_INFO(0, value) + ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, case_insensitive, "false") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_defined, 0, 1, _IS_BOOL, 0) From bdebbfc5392482ca9a523483ee40e9d26482efc9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1t=C3=A9=20Kocsis?= Date: Mon, 20 Jul 2020 20:10:08 +0200 Subject: [PATCH 3/4] Review round 2 --- Zend/tests/002.phpt | 24 ++++++++++++------------ Zend/tests/020.phpt | 2 +- Zend/zend_builtin_functions.c | 3 +-- Zend/zend_builtin_functions.stub.php | 14 ++++++++------ Zend/zend_builtin_functions_arginfo.h | 10 +++++----- ext/com_dotnet/com_com.c | 3 +-- tests/lang/func_get_arg.004.phpt | 2 +- tests/lang/func_get_arg_variation.phpt | 4 ++-- 8 files changed, 31 insertions(+), 31 deletions(-) diff --git a/Zend/tests/002.phpt b/Zend/tests/002.phpt index c90ae4efc823d..7c2ff7b4d389d 100644 --- a/Zend/tests/002.phpt +++ b/Zend/tests/002.phpt @@ -96,26 +96,26 @@ try { echo "Done\n"; ?> --EXPECTF-- -func_get_arg(): Argument #1 ($argument_number) must be greater than or equal to 0 -func_get_arg(): Argument #1 ($argument_number) must be less than the number of the arguments passed to the currently executed function -func_get_arg(): Argument #1 ($argument_number) must be less than the number of the arguments passed to the currently executed function -func_get_arg(): Argument #1 ($argument_number) must be greater than or equal to 0 +func_get_arg(): Argument #1 ($position) must be greater than or equal to 0 +func_get_arg(): Argument #1 ($position) must be less than the number of the arguments passed to the currently executed function +func_get_arg(): Argument #1 ($position) must be less than the number of the arguments passed to the currently executed function +func_get_arg(): Argument #1 ($position) must be greater than or equal to 0 int(10) -func_get_arg(): Argument #1 ($argument_number) must be less than the number of the arguments passed to the currently executed function +func_get_arg(): Argument #1 ($position) must be less than the number of the arguments passed to the currently executed function int(1) -func_get_arg(): Argument #1 ($argument_number) must be less than the number of the arguments passed to the currently executed function +func_get_arg(): Argument #1 ($position) must be less than the number of the arguments passed to the currently executed function Exception: Too few arguments to function test2(), 0 passed in %s002.php on line %d and exactly 1 expected int(1) int(2) -func_get_arg(): Argument #1 ($argument_number) must be less than the number of the arguments passed to the currently executed function -func_get_arg(): Argument #1 ($argument_number) must be greater than or equal to 0 -func_get_arg(): Argument #1 ($argument_number) must be less than the number of the arguments passed to the currently executed function -func_get_arg(): Argument #1 ($argument_number) must be less than the number of the arguments passed to the currently executed function +func_get_arg(): Argument #1 ($position) must be less than the number of the arguments passed to the currently executed function +func_get_arg(): Argument #1 ($position) must be greater than or equal to 0 +func_get_arg(): Argument #1 ($position) must be less than the number of the arguments passed to the currently executed function +func_get_arg(): Argument #1 ($position) must be less than the number of the arguments passed to the currently executed function Exception: Too few arguments to function test3(), 1 passed in %s on line %d and exactly 2 expected int(1) int(2) -func_get_arg(): Argument #1 ($argument_number) must be less than the number of the arguments passed to the currently executed function +func_get_arg(): Argument #1 ($position) must be less than the number of the arguments passed to the currently executed function int(1) -func_get_arg(): Argument #1 ($argument_number) must be less than the number of the arguments passed to the currently executed function +func_get_arg(): Argument #1 ($position) must be less than the number of the arguments passed to the currently executed function func_get_arg() cannot be called from the global scope Done diff --git a/Zend/tests/020.phpt b/Zend/tests/020.phpt index e936dc43a56f9..13e0443c07f6d 100644 --- a/Zend/tests/020.phpt +++ b/Zend/tests/020.phpt @@ -26,4 +26,4 @@ try { ?> --EXPECT-- func_get_arg() cannot be called from the global scope -func_get_arg(): Argument #1 ($argument_number) must be less than the number of the arguments passed to the currently executed function +func_get_arg(): Argument #1 ($position) must be less than the number of the arguments passed to the currently executed function diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c index f04fbe9a6f8a2..c75f2f465bf8c 100644 --- a/Zend/zend_builtin_functions.c +++ b/Zend/zend_builtin_functions.c @@ -499,8 +499,7 @@ ZEND_FUNCTION(define) } if (non_cs) { - zend_error(E_WARNING, "define(): Declaration of case-insensitive constants is no longer supported"); - RETURN_FALSE; + zend_error(E_WARNING, "define(): Argument #3 ($case_insensitive) is ignored since declaration of case-insensitive constants is no longer supported"); } ZVAL_UNDEF(&val_free); diff --git a/Zend/zend_builtin_functions.stub.php b/Zend/zend_builtin_functions.stub.php index e5ef300b26769..21b70f0711999 100644 --- a/Zend/zend_builtin_functions.stub.php +++ b/Zend/zend_builtin_functions.stub.php @@ -6,7 +6,7 @@ function zend_version(): string {} function func_num_args(): int {} -function func_get_arg(int $argument_number): mixed {} +function func_get_arg(int $position): mixed {} function func_get_args(): array {} @@ -22,7 +22,7 @@ function strncasecmp(string $string1, string $string2, int $length): int {} function error_reporting(?int $error_level = null): int {} -/** @param bool|int|float|string|array|resource|null $value */ +/** @param mixed $value */ function define(string $constant_name, $value, $case_insensitive = false): bool {} function defined(string $constant_name): bool {} @@ -33,9 +33,11 @@ function get_called_class(): string {} function get_parent_class(string|object $object = UNKNOWN): string|false {} -function is_subclass_of($object, string $class_name, bool $allow_string = true): bool {} +/** @param object|string $object */ +function is_subclass_of(mixed $object, string $class_name, bool $allow_string = true): bool {} -function is_a($object, string $class_name, bool $allow_string = false): bool {} +/** @param object|string $object */ +function is_a(mixed $object, string $class_name, bool $allow_string = false): bool {} function get_class_vars(string $class_name): array|false {} @@ -47,10 +49,10 @@ function get_mangled_object_vars(object $object): array {} function get_class_methods($class): array {} /** @param object|string $object_or_class */ -function method_exists($object_or_class, string $method): bool {} +function method_exists(mixed $object_or_class, string $method): bool {} /** @param object|string $object_or_class */ -function property_exists($object_or_class, string $property_name): bool {} +function property_exists(mixed $object_or_class, string $property): bool {} function class_exists(string $class_name, bool $autoload = true): bool {} diff --git a/Zend/zend_builtin_functions_arginfo.h b/Zend/zend_builtin_functions_arginfo.h index 208ebe494803d..d4189d8ede75b 100644 --- a/Zend/zend_builtin_functions_arginfo.h +++ b/Zend/zend_builtin_functions_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 13ccb76ae84972dc12a26555e9d8652e58150378 */ + * Stub hash: b54cd767a1c2fd07865460fc9df8368ee988c823 */ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_zend_version, 0, 0, IS_STRING, 0) ZEND_END_ARG_INFO() @@ -8,7 +8,7 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_func_num_args, 0, 0, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_func_get_arg, 0, 1, IS_MIXED, 0) - ZEND_ARG_TYPE_INFO(0, argument_number, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, position, IS_LONG, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_func_get_args, 0, 0, IS_ARRAY, 0) @@ -58,13 +58,13 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_get_parent_class, 0, 0, MAY_BE_S ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_is_subclass_of, 0, 2, _IS_BOOL, 0) - ZEND_ARG_INFO(0, object) + ZEND_ARG_TYPE_INFO(0, object, IS_MIXED, 0) ZEND_ARG_TYPE_INFO(0, class_name, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, allow_string, _IS_BOOL, 0, "true") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_is_a, 0, 2, _IS_BOOL, 0) - ZEND_ARG_INFO(0, object) + ZEND_ARG_TYPE_INFO(0, object, IS_MIXED, 0) ZEND_ARG_TYPE_INFO(0, class_name, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, allow_string, _IS_BOOL, 0, "false") ZEND_END_ARG_INFO() @@ -90,7 +90,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_property_exists, 0, 2, _IS_BOOL, 0) ZEND_ARG_INFO(0, object_or_class) - ZEND_ARG_TYPE_INFO(0, property_name, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, property, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_exists, 0, 1, _IS_BOOL, 0) diff --git a/ext/com_dotnet/com_com.c b/ext/com_dotnet/com_com.c index 979c1e9084cfe..802717bb9c67e 100644 --- a/ext/com_dotnet/com_com.c +++ b/ext/com_dotnet/com_com.c @@ -821,8 +821,7 @@ PHP_FUNCTION(com_load_typelib) } if (!cs) { - php_error_docref(NULL, E_WARNING, "Declaration of case-insensitive constants is no longer supported"); - RETURN_FALSE; + php_error_docref(NULL, E_WARNING, "com_load_typelib(): Argument #2 ($case_insensitive) is ignored since declaration of case-insensitive constants is no longer supported"); } RETVAL_FALSE; diff --git a/tests/lang/func_get_arg.004.phpt b/tests/lang/func_get_arg.004.phpt index 8fe9a9062cfab..91e0025ee417f 100644 --- a/tests/lang/func_get_arg.004.phpt +++ b/tests/lang/func_get_arg.004.phpt @@ -15,4 +15,4 @@ foo(2, 3); ?> --EXPECT-- -func_get_arg(): Argument #1 ($argument_number) must be less than the number of the arguments passed to the currently executed function +func_get_arg(): Argument #1 ($position) must be less than the number of the arguments passed to the currently executed function diff --git a/tests/lang/func_get_arg_variation.phpt b/tests/lang/func_get_arg_variation.phpt index f3a7516add744..1c4f243fbf72d 100644 --- a/tests/lang/func_get_arg_variation.phpt +++ b/tests/lang/func_get_arg_variation.phpt @@ -22,5 +22,5 @@ foo(2); ?> --EXPECT-- -func_get_arg(): Argument #1 ($argument_number) must be greater than or equal to 0 -func_get_arg(): Argument #1 ($argument_number) must be less than the number of the arguments passed to the currently executed function +func_get_arg(): Argument #1 ($position) must be greater than or equal to 0 +func_get_arg(): Argument #1 ($position) must be less than the number of the arguments passed to the currently executed function From 1281c59a598ee8a8efb6077f392d53773b7ae87a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1t=C3=A9=20Kocsis?= Date: Tue, 21 Jul 2020 13:18:02 +0200 Subject: [PATCH 4/4] Rename a few parameter names --- Zend/tests/010.phpt | 10 +- Zend/tests/class_alias_006.phpt | 2 +- Zend/zend_builtin_functions.stub.php | 25 ++-- Zend/zend_builtin_functions_arginfo.h | 30 ++--- .../get_class_methods_basic_001.phpt | 2 +- .../get_class_methods_variation_001.phpt | 110 +++++++++--------- .../get_parent_class_variation_002.phpt | 52 ++++----- 7 files changed, 115 insertions(+), 116 deletions(-) diff --git a/Zend/tests/010.phpt b/Zend/tests/010.phpt index 351398ecfa854..8c8970fa1759a 100644 --- a/Zend/tests/010.phpt +++ b/Zend/tests/010.phpt @@ -75,10 +75,10 @@ bool(false) string(3) "foo" bool(false) bool(false) -get_parent_class(): Argument #1 ($object) must be a valid class name or object, string given -get_parent_class(): Argument #1 ($object) must be a valid class name or object, string given -get_parent_class(): Argument #1 ($object) must be a valid class name or object, string given +get_parent_class(): Argument #1 ($object_or_class) must be a valid class name or object, string given +get_parent_class(): Argument #1 ($object_or_class) must be a valid class name or object, string given +get_parent_class(): Argument #1 ($object_or_class) must be a valid class name or object, string given bool(false) -get_parent_class(): Argument #1 ($object) must be a valid class name or object, array given -get_parent_class(): Argument #1 ($object) must be a valid class name or object, int given +get_parent_class(): Argument #1 ($object_or_class) must be a valid class name or object, array given +get_parent_class(): Argument #1 ($object_or_class) must be a valid class name or object, int given Done diff --git a/Zend/tests/class_alias_006.phpt b/Zend/tests/class_alias_006.phpt index 39aad71759192..8fe2ac509aeea 100644 --- a/Zend/tests/class_alias_006.phpt +++ b/Zend/tests/class_alias_006.phpt @@ -11,4 +11,4 @@ try { ?> --EXPECT-- -class_alias(): Argument #1 ($original_class_name) must be a user-defined class name, internal class name given +class_alias(): Argument #1 ($class) must be a user-defined class name, internal class name given diff --git a/Zend/zend_builtin_functions.stub.php b/Zend/zend_builtin_functions.stub.php index 21b70f0711999..a9a33d9de145f 100644 --- a/Zend/zend_builtin_functions.stub.php +++ b/Zend/zend_builtin_functions.stub.php @@ -31,22 +31,21 @@ function get_class(object $object = UNKNOWN): string {} function get_called_class(): string {} -function get_parent_class(string|object $object = UNKNOWN): string|false {} +function get_parent_class(object|string $object_or_class = UNKNOWN): string|false {} -/** @param object|string $object */ -function is_subclass_of(mixed $object, string $class_name, bool $allow_string = true): bool {} +/** @param object|string $object_or_class */ +function is_subclass_of(mixed $object_or_class, string $class, bool $allow_string = true): bool {} -/** @param object|string $object */ -function is_a(mixed $object, string $class_name, bool $allow_string = false): bool {} +/** @param object|string $object_or_class */ +function is_a(mixed $object_or_class, string $class, bool $allow_string = false): bool {} -function get_class_vars(string $class_name): array|false {} +function get_class_vars(string $class): array|false {} function get_object_vars(object $object): array {} function get_mangled_object_vars(object $object): array {} -/** string|object $class */ -function get_class_methods($class): array {} +function get_class_methods(object|string $object_or_class): array {} /** @param object|string $object_or_class */ function method_exists(mixed $object_or_class, string $method): bool {} @@ -54,15 +53,15 @@ function method_exists(mixed $object_or_class, string $method): bool {} /** @param object|string $object_or_class */ function property_exists(mixed $object_or_class, string $property): bool {} -function class_exists(string $class_name, bool $autoload = true): bool {} +function class_exists(string $class, bool $autoload = true): bool {} -function interface_exists(string $interface_name, bool $autoload = true): bool {} +function interface_exists(string $interface, bool $autoload = true): bool {} -function trait_exists(string $trait_name, bool $autoload = true): bool {} +function trait_exists(string $trait, bool $autoload = true): bool {} -function function_exists(string $function_name): bool {} +function function_exists(string $function): bool {} -function class_alias(string $original_class_name, string $alias, bool $autoload = true): bool {} +function class_alias(string $class, string $alias, bool $autoload = true): bool {} function get_included_files(): array {} diff --git a/Zend/zend_builtin_functions_arginfo.h b/Zend/zend_builtin_functions_arginfo.h index d4189d8ede75b..0e1a7c3879e3a 100644 --- a/Zend/zend_builtin_functions_arginfo.h +++ b/Zend/zend_builtin_functions_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: b54cd767a1c2fd07865460fc9df8368ee988c823 */ + * Stub hash: d1ab4864c1159916b45c8f272a2a1d708b2dca65 */ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_zend_version, 0, 0, IS_STRING, 0) ZEND_END_ARG_INFO() @@ -54,23 +54,23 @@ ZEND_END_ARG_INFO() #define arginfo_get_called_class arginfo_zend_version ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_get_parent_class, 0, 0, MAY_BE_STRING|MAY_BE_FALSE) - ZEND_ARG_TYPE_MASK(0, object, MAY_BE_STRING|MAY_BE_OBJECT, NULL) + ZEND_ARG_TYPE_MASK(0, object_or_class, MAY_BE_OBJECT|MAY_BE_STRING, NULL) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_is_subclass_of, 0, 2, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO(0, object, IS_MIXED, 0) - ZEND_ARG_TYPE_INFO(0, class_name, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, object_or_class, IS_MIXED, 0) + ZEND_ARG_TYPE_INFO(0, class, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, allow_string, _IS_BOOL, 0, "true") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_is_a, 0, 2, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO(0, object, IS_MIXED, 0) - ZEND_ARG_TYPE_INFO(0, class_name, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, object_or_class, IS_MIXED, 0) + ZEND_ARG_TYPE_INFO(0, class, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, allow_string, _IS_BOOL, 0, "false") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_get_class_vars, 0, 1, MAY_BE_ARRAY|MAY_BE_FALSE) - ZEND_ARG_TYPE_INFO(0, class_name, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, class, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_get_object_vars, 0, 1, IS_ARRAY, 0) @@ -80,40 +80,40 @@ ZEND_END_ARG_INFO() #define arginfo_get_mangled_object_vars arginfo_get_object_vars ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_get_class_methods, 0, 1, IS_ARRAY, 0) - ZEND_ARG_INFO(0, class) + ZEND_ARG_TYPE_MASK(0, object_or_class, MAY_BE_OBJECT|MAY_BE_STRING, NULL) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_method_exists, 0, 2, _IS_BOOL, 0) - ZEND_ARG_INFO(0, object_or_class) + ZEND_ARG_TYPE_INFO(0, object_or_class, IS_MIXED, 0) ZEND_ARG_TYPE_INFO(0, method, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_property_exists, 0, 2, _IS_BOOL, 0) - ZEND_ARG_INFO(0, object_or_class) + ZEND_ARG_TYPE_INFO(0, object_or_class, IS_MIXED, 0) ZEND_ARG_TYPE_INFO(0, property, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_exists, 0, 1, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO(0, class_name, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, class, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, autoload, _IS_BOOL, 0, "true") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_interface_exists, 0, 1, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO(0, interface_name, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, interface, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, autoload, _IS_BOOL, 0, "true") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_trait_exists, 0, 1, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO(0, trait_name, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, trait, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, autoload, _IS_BOOL, 0, "true") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_function_exists, 0, 1, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO(0, function_name, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, function, IS_STRING, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_alias, 0, 2, _IS_BOOL, 0) - ZEND_ARG_TYPE_INFO(0, original_class_name, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, class, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, alias, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, autoload, _IS_BOOL, 0, "true") ZEND_END_ARG_INFO() 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 27993799d324c..ebb45aaab615d 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 ($class) must be a valid class name or object, string given +get_class_methods(): Argument #1 ($object_or_class) must be a valid class name or object, string 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 index 7538b294038ea..0d103c1144fcf 100644 --- a/ext/standard/tests/class_object/get_class_methods_variation_001.phpt +++ b/ext/standard/tests/class_object/get_class_methods_variation_001.phpt @@ -69,13 +69,13 @@ $values = array( // loop through each element of the array for class foreach($values as $value) { - echo "\nArg value " . (is_object($value) ? get_class($value) : $value) . " \n"; + 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-- @@ -83,90 +83,90 @@ echo "Done"; Error: 2 - Undefined variable $undefined_var Error: 2 - Undefined variable $unset_var -Arg value 0 -get_class_methods(): Argument #1 ($class) must be a valid class name or object, int given +Arg value 0 +get_class_methods(): Argument #1 ($object_or_class) must be a valid class name or object, int given -Arg value 1 -get_class_methods(): Argument #1 ($class) must be a valid class name or object, int given +Arg value 1 +get_class_methods(): Argument #1 ($object_or_class) must be a valid class name or object, int given -Arg value 12345 -get_class_methods(): Argument #1 ($class) must be a valid class name or object, int given +Arg value 12345 +get_class_methods(): Argument #1 ($object_or_class) must be a valid class name or object, int given -Arg value -2345 -get_class_methods(): Argument #1 ($class) must be a valid class name or object, int given +Arg value -2345 +get_class_methods(): Argument #1 ($object_or_class) must be a valid class name or object, int given -Arg value 10.5 -get_class_methods(): Argument #1 ($class) must be a valid class name or object, float given +Arg value 10.5 +get_class_methods(): Argument #1 ($object_or_class) must be a valid class name or object, float given -Arg value -10.5 -get_class_methods(): Argument #1 ($class) must be a valid class name or object, float given +Arg value -10.5 +get_class_methods(): Argument #1 ($object_or_class) must be a valid class name or object, float given -Arg value 101234567000 -get_class_methods(): Argument #1 ($class) must be a valid class name or object, float given +Arg value 101234567000 +get_class_methods(): Argument #1 ($object_or_class) must be a valid class name or object, float given -Arg value 1.07654321E-9 -get_class_methods(): Argument #1 ($class) must be a valid class name or object, float given +Arg value 1.07654321E-9 +get_class_methods(): Argument #1 ($object_or_class) must be a valid class name or object, float given -Arg value 0.5 -get_class_methods(): Argument #1 ($class) must be a valid class name or object, float given +Arg value 0.5 +get_class_methods(): Argument #1 ($object_or_class) must be a valid class name or object, float given Error: 2 - Array to string conversion -Arg value Array -get_class_methods(): Argument #1 ($class) must be a valid class name or object, array given +Arg value Array +get_class_methods(): Argument #1 ($object_or_class) must be a valid class name or object, array given Error: 2 - Array to string conversion -Arg value Array -get_class_methods(): Argument #1 ($class) must be a valid class name or object, array given +Arg value Array +get_class_methods(): Argument #1 ($object_or_class) must be a valid class name or object, array given Error: 2 - Array to string conversion -Arg value Array -get_class_methods(): Argument #1 ($class) must be a valid class name or object, array given +Arg value Array +get_class_methods(): Argument #1 ($object_or_class) must be a valid class name or object, array given Error: 2 - Array to string conversion -Arg value Array -get_class_methods(): Argument #1 ($class) must be a valid class name or object, array given +Arg value Array +get_class_methods(): Argument #1 ($object_or_class) must be a valid class name or object, array given Error: 2 - Array to string conversion -Arg value Array -get_class_methods(): Argument #1 ($class) must be a valid class name or object, array given +Arg value Array +get_class_methods(): Argument #1 ($object_or_class) must be a valid class name or object, array given -Arg value -get_class_methods(): Argument #1 ($class) must be a valid class name or object, null given +Arg value +get_class_methods(): Argument #1 ($object_or_class) must be a valid class name or object, null given -Arg value -get_class_methods(): Argument #1 ($class) must be a valid class name or object, null given +Arg value +get_class_methods(): Argument #1 ($object_or_class) must be a valid class name or object, null given -Arg value 1 -get_class_methods(): Argument #1 ($class) must be a valid class name or object, bool given +Arg value 1 +get_class_methods(): Argument #1 ($object_or_class) must be a valid class name or object, bool given -Arg value -get_class_methods(): Argument #1 ($class) must be a valid class name or object, bool given +Arg value +get_class_methods(): Argument #1 ($object_or_class) must be a valid class name or object, bool given -Arg value 1 -get_class_methods(): Argument #1 ($class) must be a valid class name or object, bool given +Arg value 1 +get_class_methods(): Argument #1 ($object_or_class) must be a valid class name or object, bool given -Arg value -get_class_methods(): Argument #1 ($class) must be a valid class name or object, bool given +Arg value +get_class_methods(): Argument #1 ($object_or_class) must be a valid class name or object, bool given -Arg value -get_class_methods(): Argument #1 ($class) must be a valid class name or object, string given +Arg value +get_class_methods(): Argument #1 ($object_or_class) must be a valid class name or object, string given -Arg value -get_class_methods(): Argument #1 ($class) must be a valid class name or object, string given +Arg value +get_class_methods(): Argument #1 ($object_or_class) must be a valid class name or object, string given -Arg value string -get_class_methods(): Argument #1 ($class) must be a valid class name or object, string given +Arg value string +get_class_methods(): Argument #1 ($object_or_class) must be a valid class name or object, string given -Arg value string -get_class_methods(): Argument #1 ($class) must be a valid class name or object, string given +Arg value string +get_class_methods(): Argument #1 ($object_or_class) must be a valid class name or object, string given -Arg value stdClass +Arg value stdClass array(0) { } -Arg value -get_class_methods(): Argument #1 ($class) must be a valid class name or object, null given +Arg value +get_class_methods(): Argument #1 ($object_or_class) must be a valid class name or object, null given -Arg value -get_class_methods(): Argument #1 ($class) must be a valid class name or object, null given +Arg value +get_class_methods(): Argument #1 ($object_or_class) must be a valid class name or object, 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 index a8c8e1711760f..9d6361e4498d6 100644 --- a/ext/standard/tests/class_object/get_parent_class_variation_002.phpt +++ b/ext/standard/tests/class_object/get_parent_class_variation_002.phpt @@ -87,90 +87,90 @@ Error: 2 - Undefined variable $undefined_var Error: 2 - Undefined variable $unset_var Arg value 0 -get_parent_class(): Argument #1 ($object) must be a valid class name or object, int given +get_parent_class(): Argument #1 ($object_or_class) must be a valid class name or object, int given Arg value 1 -get_parent_class(): Argument #1 ($object) must be a valid class name or object, int given +get_parent_class(): Argument #1 ($object_or_class) must be a valid class name or object, int given Arg value 12345 -get_parent_class(): Argument #1 ($object) must be a valid class name or object, int given +get_parent_class(): Argument #1 ($object_or_class) must be a valid class name or object, int given Arg value -2345 -get_parent_class(): Argument #1 ($object) must be a valid class name or object, int given +get_parent_class(): Argument #1 ($object_or_class) must be a valid class name or object, int given Arg value 10.5 -get_parent_class(): Argument #1 ($object) must be a valid class name or object, float given +get_parent_class(): Argument #1 ($object_or_class) must be a valid class name or object, float given Arg value -10.5 -get_parent_class(): Argument #1 ($object) must be a valid class name or object, float given +get_parent_class(): Argument #1 ($object_or_class) must be a valid class name or object, float given Arg value 101234567000 -get_parent_class(): Argument #1 ($object) must be a valid class name or object, float given +get_parent_class(): Argument #1 ($object_or_class) must be a valid class name or object, float given Arg value 1.07654321E-9 -get_parent_class(): Argument #1 ($object) must be a valid class name or object, float given +get_parent_class(): Argument #1 ($object_or_class) must be a valid class name or object, float given Arg value 0.5 -get_parent_class(): Argument #1 ($object) must be a valid class name or object, float given +get_parent_class(): Argument #1 ($object_or_class) must be a valid class name or object, float given Error: 2 - Array to string conversion Arg value Array -get_parent_class(): Argument #1 ($object) must be a valid class name or object, array given +get_parent_class(): Argument #1 ($object_or_class) must be a valid class name or object, array given Error: 2 - Array to string conversion Arg value Array -get_parent_class(): Argument #1 ($object) must be a valid class name or object, array given +get_parent_class(): Argument #1 ($object_or_class) must be a valid class name or object, array given Error: 2 - Array to string conversion Arg value Array -get_parent_class(): Argument #1 ($object) must be a valid class name or object, array given +get_parent_class(): Argument #1 ($object_or_class) must be a valid class name or object, array given Error: 2 - Array to string conversion Arg value Array -get_parent_class(): Argument #1 ($object) must be a valid class name or object, array given +get_parent_class(): Argument #1 ($object_or_class) must be a valid class name or object, array given Error: 2 - Array to string conversion Arg value Array -get_parent_class(): Argument #1 ($object) must be a valid class name or object, array given +get_parent_class(): Argument #1 ($object_or_class) must be a valid class name or object, array given Arg value -get_parent_class(): Argument #1 ($object) must be a valid class name or object, null given +get_parent_class(): Argument #1 ($object_or_class) must be a valid class name or object, null given Arg value -get_parent_class(): Argument #1 ($object) must be a valid class name or object, null given +get_parent_class(): Argument #1 ($object_or_class) must be a valid class name or object, null given Arg value 1 -get_parent_class(): Argument #1 ($object) must be a valid class name or object, bool given +get_parent_class(): Argument #1 ($object_or_class) must be a valid class name or object, bool given Arg value -get_parent_class(): Argument #1 ($object) must be a valid class name or object, bool given +get_parent_class(): Argument #1 ($object_or_class) must be a valid class name or object, bool given Arg value 1 -get_parent_class(): Argument #1 ($object) must be a valid class name or object, bool given +get_parent_class(): Argument #1 ($object_or_class) must be a valid class name or object, bool given Arg value -get_parent_class(): Argument #1 ($object) must be a valid class name or object, bool given +get_parent_class(): Argument #1 ($object_or_class) must be a valid class name or object, bool given Arg value -get_parent_class(): Argument #1 ($object) must be a valid class name or object, string given +get_parent_class(): Argument #1 ($object_or_class) must be a valid class name or object, string given Arg value -get_parent_class(): Argument #1 ($object) must be a valid class name or object, string given +get_parent_class(): Argument #1 ($object_or_class) must be a valid class name or object, string given Arg value string In autoload(string) -get_parent_class(): Argument #1 ($object) must be a valid class name or object, string given +get_parent_class(): Argument #1 ($object_or_class) must be a valid class name or object, string given Arg value String In autoload(String) -get_parent_class(): Argument #1 ($object) must be a valid class name or object, string given +get_parent_class(): Argument #1 ($object_or_class) must be a valid class name or object, string given Arg value stdClass bool(false) Arg value -get_parent_class(): Argument #1 ($object) must be a valid class name or object, null given +get_parent_class(): Argument #1 ($object_or_class) must be a valid class name or object, null given Arg value -get_parent_class(): Argument #1 ($object) must be a valid class name or object, null given +get_parent_class(): Argument #1 ($object_or_class) must be a valid class name or object, null given Done