From 2ae3d23109991a3d4ce74503a7f58f65bc1655e7 Mon Sep 17 00:00:00 2001 From: George Peter Banyard Date: Wed, 21 Aug 2019 01:11:44 +0200 Subject: [PATCH] Promote warnings to errors in max() --- ext/standard/array.c | 12 ++++++----- ext/standard/tests/array/max.phpt | 34 ++++++++++++++++++++----------- 2 files changed, 29 insertions(+), 17 deletions(-) diff --git a/ext/standard/array.c b/ext/standard/array.c index 70523d479ef4f..da0cbcbf24bcf 100644 --- a/ext/standard/array.c +++ b/ext/standard/array.c @@ -1285,7 +1285,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) { @@ -1301,14 +1303,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 { diff --git a/ext/standard/tests/array/max.phpt b/ext/standard/tests/array/max.phpt index df471ef255945..9e6448cd520da 100644 --- a/ext/standard/tests/array/max.phpt +++ b/ext/standard/tests/array/max.phpt @@ -5,9 +5,24 @@ precision=14 --FILE-- 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"