Promote warnings to errors in max()

This commit is contained in:
George Peter Banyard 2019-08-21 01:11:44 +02:00
parent b91a881b32
commit 9fc3d5da11
2 changed files with 29 additions and 17 deletions

View File

@ -1287,7 +1287,9 @@ PHP_FUNCTION(min)
}
/* }}} */
/* {{{ proto mixed max(mixed arg1 [, mixed arg2 [, mixed ...]])
/* {{{
* proto mixed max(array values)
* proto mixed max(mixed arg1 [, mixed arg2 [, mixed ...]])
Return the highest value in an array or a series of arguments */
PHP_FUNCTION(max)
{
@ -1303,14 +1305,14 @@ PHP_FUNCTION(max)
zval *result;
if (Z_TYPE(args[0]) != IS_ARRAY) {
php_error_docref(NULL, E_WARNING, "When only one parameter is given, it must be an array");
RETVAL_NULL();
zend_type_error("When only one parameter is given, it must be an array");
return;
} else {
if ((result = zend_hash_minmax(Z_ARRVAL(args[0]), php_array_data_compare, 1)) != NULL) {
ZVAL_COPY_DEREF(return_value, result);
} else {
php_error_docref(NULL, E_WARNING, "Array must contain at least one element");
RETVAL_FALSE;
zend_throw_error(NULL, "Array must contain at least one element");
return;
}
}
} else {

View File

@ -5,9 +5,24 @@ precision=14
--FILE--
<?php
var_dump(max(1));
var_dump(max(array()));
var_dump(max(new stdclass));
try {
var_dump(max(1));
} catch (\TypeError $e) {
echo $e->getMessage() . "\n";
}
try {
var_dump(max(array()));
} catch (\Error $e) {
echo $e->getMessage() . "\n";
}
try {
var_dump(max(new stdclass));
} catch (\TypeError $e) {
echo $e->getMessage() . "\n";
}
var_dump(max(2,1,2));
var_dump(max(2.1,2.11,2.09));
var_dump(max("", "t", "b"));
@ -18,15 +33,10 @@ var_dump(max(0, true, false, true));
echo "Done\n";
?>
--EXPECTF--
Warning: max(): When only one parameter is given, it must be an array in %s on line %d
NULL
Warning: max(): Array must contain at least one element in %s on line %d
bool(false)
Warning: max(): When only one parameter is given, it must be an array in %s on line %d
NULL
--EXPECT--
When only one parameter is given, it must be an array
Array must contain at least one element
When only one parameter is given, it must be an array
int(2)
float(2.11)
string(1) "t"