From 7220bf752187fac78e97ae439e15bfb032f50085 Mon Sep 17 00:00:00 2001 From: George Peter Banyard Date: Tue, 20 Aug 2019 23:35:01 +0200 Subject: [PATCH] Promote warnings to errors in array_multisort() --- ext/standard/array.c | 10 +-- .../tests/array/array_multisort_error.phpt | 22 +++-- .../array/array_multisort_variation1.phpt | 83 +++++++---------- .../array/array_multisort_variation2.phpt | 88 +++++++------------ .../array/array_multisort_variation3.phpt | 86 +++++++----------- ext/standard/tests/array/bug77395.phpt | 9 +- 6 files changed, 121 insertions(+), 177 deletions(-) diff --git a/ext/standard/array.c b/ext/standard/array.c index 70523d479ef4f..46014ef6b8c53 100644 --- a/ext/standard/array.c +++ b/ext/standard/array.c @@ -5688,7 +5688,7 @@ PHP_FUNCTION(array_multisort) sort_order = Z_LVAL_P(arg) == PHP_SORT_DESC ? PHP_SORT_DESC : PHP_SORT_ASC; parse_state[MULTISORT_ORDER] = 0; } else { - php_error_docref(NULL, E_WARNING, "Argument #%d is expected to be an array or sorting flag that has not already been specified", i + 1); + zend_type_error("Argument #%d is expected to be an array or sorting flag that has not already been specified", i + 1); MULTISORT_ABORT; } break; @@ -5704,19 +5704,19 @@ PHP_FUNCTION(array_multisort) sort_type = (int)Z_LVAL_P(arg); parse_state[MULTISORT_TYPE] = 0; } else { - php_error_docref(NULL, E_WARNING, "Argument #%d is expected to be an array or sorting flag that has not already been specified", i + 1); + zend_type_error("Argument #%d is expected to be an array or sorting flag that has not already been specified", i + 1); MULTISORT_ABORT; } break; default: - php_error_docref(NULL, E_WARNING, "Argument #%d is an unknown sort flag", i + 1); + zend_type_error("Argument #%d is an unknown sort flag", i + 1); MULTISORT_ABORT; break; } } else { - php_error_docref(NULL, E_WARNING, "Argument #%d is expected to be an array or a sort flag", i + 1); + zend_type_error("Argument #%d is expected to be an array or a sort flag", i + 1); MULTISORT_ABORT; } } @@ -5727,7 +5727,7 @@ PHP_FUNCTION(array_multisort) array_size = zend_hash_num_elements(Z_ARRVAL_P(arrays[0])); for (i = 0; i < num_arrays; i++) { if (zend_hash_num_elements(Z_ARRVAL_P(arrays[i])) != (uint32_t)array_size) { - php_error_docref(NULL, E_WARNING, "Array sizes are inconsistent"); + zend_throw_error(NULL, "Array sizes are inconsistent"); MULTISORT_ABORT; } } diff --git a/ext/standard/tests/array/array_multisort_error.phpt b/ext/standard/tests/array/array_multisort_error.phpt index 105662be07096..5d3bab456a729 100644 --- a/ext/standard/tests/array/array_multisort_error.phpt +++ b/ext/standard/tests/array/array_multisort_error.phpt @@ -12,24 +12,28 @@ echo "*** Testing array_multisort() : error conditions ***\n"; echo "\n-- Testing array_multisort() function with repeated flags --\n"; $ar1 = array(1); -var_dump( array_multisort($ar1, SORT_ASC, SORT_ASC) ); +try { + var_dump( array_multisort($ar1, SORT_ASC, SORT_ASC) ); +} catch (Error $e) { + echo $e->getMessage() . "\n"; +} echo "\n-- Testing array_multisort() function with repeated flags --\n"; $ar1 = array(1); -var_dump( array_multisort($ar1, SORT_STRING, SORT_NUMERIC) ); +try { + var_dump( array_multisort($ar1, SORT_STRING, SORT_NUMERIC) ); +} catch (Error $e) { + echo $e->getMessage() . "\n"; +} ?> ===DONE=== ---EXPECTF-- +--EXPECT-- *** Testing array_multisort() : error conditions *** -- Testing array_multisort() function with repeated flags -- - -Warning: array_multisort(): Argument #3 is expected to be an array or sorting flag that has not already been specified in %sarray_multisort_error.php on line %d -bool(false) +Argument #3 is expected to be an array or sorting flag that has not already been specified -- Testing array_multisort() function with repeated flags -- - -Warning: array_multisort(): Argument #3 is expected to be an array or sorting flag that has not already been specified in %sarray_multisort_error.php on line %d -bool(false) +Argument #3 is expected to be an array or sorting flag that has not already been specified ===DONE=== diff --git a/ext/standard/tests/array/array_multisort_variation1.phpt b/ext/standard/tests/array/array_multisort_variation1.phpt index 677a87103fc94..763944054ab70 100644 --- a/ext/standard/tests/array/array_multisort_variation1.phpt +++ b/ext/standard/tests/array/array_multisort_variation1.phpt @@ -97,111 +97,90 @@ $inputs = array( foreach($inputs as $key =>$value) { echo "\n--$key--\n"; - var_dump( array_multisort($value)); + try { + var_dump( array_multisort($value)); + } catch (Error $e) { + echo $e->getMessage() . "\n"; + } }; ?> ===DONE=== ---EXPECTF-- +--EXPECT-- *** Testing array_multisort() : usage variation *** --int 0-- -Error: 2 - array_multisort(): Argument #1 is expected to be an array or sorting flag that has not already been specified, %sarray_multisort_variation1.php(%d) -bool(false) +Argument #1 is expected to be an array or sorting flag that has not already been specified --int 1-- -Error: 2 - array_multisort(): Argument #1 is expected to be an array or sorting flag that has not already been specified, %sarray_multisort_variation1.php(%d) -bool(false) +Argument #1 is expected to be an array or sorting flag that has not already been specified --int 12345-- -Error: 2 - array_multisort(): Argument #1 is an unknown sort flag, %sarray_multisort_variation1.php(%d) -bool(false) +Argument #1 is an unknown sort flag --int -12345-- -Error: 2 - array_multisort(): Argument #1 is an unknown sort flag, %sarray_multisort_variation1.php(%d) -bool(false) +Argument #1 is an unknown sort flag --float 10.5-- -Error: 2 - array_multisort(): Argument #1 is expected to be an array or a sort flag, %sarray_multisort_variation1.php(%d) -bool(false) +Argument #1 is expected to be an array or a sort flag --float -10.5-- -Error: 2 - array_multisort(): Argument #1 is expected to be an array or a sort flag, %sarray_multisort_variation1.php(%d) -bool(false) +Argument #1 is expected to be an array or a sort flag --float 12.3456789000e10-- -Error: 2 - array_multisort(): Argument #1 is expected to be an array or a sort flag, %sarray_multisort_variation1.php(%d) -bool(false) +Argument #1 is expected to be an array or a sort flag --float -12.3456789000e10-- -Error: 2 - array_multisort(): Argument #1 is expected to be an array or a sort flag, %sarray_multisort_variation1.php(%d) -bool(false) +Argument #1 is expected to be an array or a sort flag --float .5-- -Error: 2 - array_multisort(): Argument #1 is expected to be an array or a sort flag, %sarray_multisort_variation1.php(%d) -bool(false) +Argument #1 is expected to be an array or a sort flag --uppercase NULL-- -Error: 2 - array_multisort(): Argument #1 is expected to be an array or a sort flag, %sarray_multisort_variation1.php(%d) -bool(false) +Argument #1 is expected to be an array or a sort flag --lowercase null-- -Error: 2 - array_multisort(): Argument #1 is expected to be an array or a sort flag, %sarray_multisort_variation1.php(%d) -bool(false) +Argument #1 is expected to be an array or a sort flag --lowercase true-- -Error: 2 - array_multisort(): Argument #1 is expected to be an array or a sort flag, %sarray_multisort_variation1.php(%d) -bool(false) +Argument #1 is expected to be an array or a sort flag --lowercase false-- -Error: 2 - array_multisort(): Argument #1 is expected to be an array or a sort flag, %sarray_multisort_variation1.php(%d) -bool(false) +Argument #1 is expected to be an array or a sort flag --uppercase TRUE-- -Error: 2 - array_multisort(): Argument #1 is expected to be an array or a sort flag, %sarray_multisort_variation1.php(%d) -bool(false) +Argument #1 is expected to be an array or a sort flag --uppercase FALSE-- -Error: 2 - array_multisort(): Argument #1 is expected to be an array or a sort flag, %sarray_multisort_variation1.php(%d) -bool(false) +Argument #1 is expected to be an array or a sort flag --empty string DQ-- -Error: 2 - array_multisort(): Argument #1 is expected to be an array or a sort flag, %sarray_multisort_variation1.php(%d) -bool(false) +Argument #1 is expected to be an array or a sort flag --empty string SQ-- -Error: 2 - array_multisort(): Argument #1 is expected to be an array or a sort flag, %sarray_multisort_variation1.php(%d) -bool(false) +Argument #1 is expected to be an array or a sort flag --string DQ-- -Error: 2 - array_multisort(): Argument #1 is expected to be an array or a sort flag, %sarray_multisort_variation1.php(%d) -bool(false) +Argument #1 is expected to be an array or a sort flag --string SQ-- -Error: 2 - array_multisort(): Argument #1 is expected to be an array or a sort flag, %sarray_multisort_variation1.php(%d) -bool(false) +Argument #1 is expected to be an array or a sort flag --mixed case string-- -Error: 2 - array_multisort(): Argument #1 is expected to be an array or a sort flag, %sarray_multisort_variation1.php(%d) -bool(false) +Argument #1 is expected to be an array or a sort flag --heredoc-- -Error: 2 - array_multisort(): Argument #1 is expected to be an array or a sort flag, %sarray_multisort_variation1.php(%d) -bool(false) +Argument #1 is expected to be an array or a sort flag --instance of classWithToString-- -Error: 2 - array_multisort(): Argument #1 is expected to be an array or a sort flag, %sarray_multisort_variation1.php(%d) -bool(false) +Argument #1 is expected to be an array or a sort flag --instance of classWithoutToString-- -Error: 2 - array_multisort(): Argument #1 is expected to be an array or a sort flag, %sarray_multisort_variation1.php(%d) -bool(false) +Argument #1 is expected to be an array or a sort flag --undefined var-- -Error: 2 - array_multisort(): Argument #1 is expected to be an array or a sort flag, %sarray_multisort_variation1.php(%d) -bool(false) +Argument #1 is expected to be an array or a sort flag --unset var-- -Error: 2 - array_multisort(): Argument #1 is expected to be an array or a sort flag, %sarray_multisort_variation1.php(%d) -bool(false) +Argument #1 is expected to be an array or a sort flag ===DONE=== diff --git a/ext/standard/tests/array/array_multisort_variation2.phpt b/ext/standard/tests/array/array_multisort_variation2.phpt index f9a00e9701dc5..b23d8b19fafc7 100644 --- a/ext/standard/tests/array/array_multisort_variation2.phpt +++ b/ext/standard/tests/array/array_multisort_variation2.phpt @@ -104,13 +104,17 @@ $inputs = array( // loop through each element of the array for SORT_REGULAR|SORT_NUMERIC|SORT_STRING|SORT_NATURAL|SORT_FLAG_CASE]] foreach($inputs as $key =>$value) { - echo "\n--$key--\n"; - var_dump( array_multisort($ar1, $value) ); + echo "\n--$key--\n"; + try { + var_dump( array_multisort($ar1, $value) ); + } catch (Error $e) { + echo $e->getMessage() . "\n"; + } }; ?> ===DONE=== ---EXPECTF-- +--EXPECT-- *** Testing array_multisort() : usage variation *** --int 0-- @@ -120,109 +124,83 @@ bool(true) bool(true) --int 12345-- -Error: 2 - array_multisort(): Argument #2 is an unknown sort flag, %sarray_multisort_variation2.php(%d) -bool(false) +Argument #2 is an unknown sort flag --int -12345-- -Error: 2 - array_multisort(): Argument #2 is an unknown sort flag, %sarray_multisort_variation2.php(%d) -bool(false) +Argument #2 is an unknown sort flag --float 10.5-- -Error: 2 - array_multisort(): Argument #2 is expected to be an array or a sort flag, %sarray_multisort_variation2.php(%d) -bool(false) +Argument #2 is expected to be an array or a sort flag --float -10.5-- -Error: 2 - array_multisort(): Argument #2 is expected to be an array or a sort flag, %sarray_multisort_variation2.php(%d) -bool(false) +Argument #2 is expected to be an array or a sort flag --float 12.3456789000e10-- -Error: 2 - array_multisort(): Argument #2 is expected to be an array or a sort flag, %sarray_multisort_variation2.php(%d) -bool(false) +Argument #2 is expected to be an array or a sort flag --float -12.3456789000e10-- -Error: 2 - array_multisort(): Argument #2 is expected to be an array or a sort flag, %sarray_multisort_variation2.php(%d) -bool(false) +Argument #2 is expected to be an array or a sort flag --float .5-- -Error: 2 - array_multisort(): Argument #2 is expected to be an array or a sort flag, %sarray_multisort_variation2.php(%d) -bool(false) +Argument #2 is expected to be an array or a sort flag --empty array-- -Error: 2 - array_multisort(): Array sizes are inconsistent, %sarray_multisort_variation2.php(%d) -bool(false) +Array sizes are inconsistent --int indexed array-- -Error: 2 - array_multisort(): Array sizes are inconsistent, %sarray_multisort_variation2.php(%d) -bool(false) +Array sizes are inconsistent --associative array-- bool(true) --nested arrays-- -Error: 2 - array_multisort(): Array sizes are inconsistent, %sarray_multisort_variation2.php(%d) -bool(false) +Array sizes are inconsistent --uppercase NULL-- -Error: 2 - array_multisort(): Argument #2 is expected to be an array or a sort flag, %sarray_multisort_variation2.php(%d) -bool(false) +Argument #2 is expected to be an array or a sort flag --lowercase null-- -Error: 2 - array_multisort(): Argument #2 is expected to be an array or a sort flag, %sarray_multisort_variation2.php(%d) -bool(false) +Argument #2 is expected to be an array or a sort flag --lowercase true-- -Error: 2 - array_multisort(): Argument #2 is expected to be an array or a sort flag, %sarray_multisort_variation2.php(%d) -bool(false) +Argument #2 is expected to be an array or a sort flag --lowercase false-- -Error: 2 - array_multisort(): Argument #2 is expected to be an array or a sort flag, %sarray_multisort_variation2.php(%d) -bool(false) +Argument #2 is expected to be an array or a sort flag --uppercase TRUE-- -Error: 2 - array_multisort(): Argument #2 is expected to be an array or a sort flag, %sarray_multisort_variation2.php(%d) -bool(false) +Argument #2 is expected to be an array or a sort flag --uppercase FALSE-- -Error: 2 - array_multisort(): Argument #2 is expected to be an array or a sort flag, %sarray_multisort_variation2.php(%d) -bool(false) +Argument #2 is expected to be an array or a sort flag --empty string DQ-- -Error: 2 - array_multisort(): Argument #2 is expected to be an array or a sort flag, %sarray_multisort_variation2.php(%d) -bool(false) +Argument #2 is expected to be an array or a sort flag --empty string SQ-- -Error: 2 - array_multisort(): Argument #2 is expected to be an array or a sort flag, %sarray_multisort_variation2.php(%d) -bool(false) +Argument #2 is expected to be an array or a sort flag --string DQ-- -Error: 2 - array_multisort(): Argument #2 is expected to be an array or a sort flag, %sarray_multisort_variation2.php(%d) -bool(false) +Argument #2 is expected to be an array or a sort flag --string SQ-- -Error: 2 - array_multisort(): Argument #2 is expected to be an array or a sort flag, %sarray_multisort_variation2.php(%d) -bool(false) +Argument #2 is expected to be an array or a sort flag --mixed case string-- -Error: 2 - array_multisort(): Argument #2 is expected to be an array or a sort flag, %sarray_multisort_variation2.php(%d) -bool(false) +Argument #2 is expected to be an array or a sort flag --heredoc-- -Error: 2 - array_multisort(): Argument #2 is expected to be an array or a sort flag, %sarray_multisort_variation2.php(%d) -bool(false) +Argument #2 is expected to be an array or a sort flag --instance of classWithToString-- -Error: 2 - array_multisort(): Argument #2 is expected to be an array or a sort flag, %sarray_multisort_variation2.php(%d) -bool(false) +Argument #2 is expected to be an array or a sort flag --instance of classWithoutToString-- -Error: 2 - array_multisort(): Argument #2 is expected to be an array or a sort flag, %sarray_multisort_variation2.php(%d) -bool(false) +Argument #2 is expected to be an array or a sort flag --undefined var-- -Error: 2 - array_multisort(): Argument #2 is expected to be an array or a sort flag, %sarray_multisort_variation2.php(%d) -bool(false) +Argument #2 is expected to be an array or a sort flag --unset var-- -Error: 2 - array_multisort(): Argument #2 is expected to be an array or a sort flag, %sarray_multisort_variation2.php(%d) -bool(false) +Argument #2 is expected to be an array or a sort flag ===DONE=== diff --git a/ext/standard/tests/array/array_multisort_variation3.phpt b/ext/standard/tests/array/array_multisort_variation3.phpt index c625d2a56606e..42b1d9fbe571d 100644 --- a/ext/standard/tests/array/array_multisort_variation3.phpt +++ b/ext/standard/tests/array/array_multisort_variation3.phpt @@ -95,114 +95,92 @@ $inputs = array( ); // loop through each element of the array for ar2 - foreach($inputs as $key =>$value) { - echo "\n--$key--\n"; - var_dump( array_multisort($ar1, SORT_REGULAR, $value) ); + echo "\n--$key--\n"; + try { + var_dump( array_multisort($ar1, SORT_REGULAR, $value) ); + } catch (Error $e) { + echo $e->getMessage() . "\n"; + } }; ?> ===DONE=== ---EXPECTF-- +--EXPECT-- *** Testing array_multisort() : usage variation *** --int 0-- -Error: 2 - array_multisort(): Argument #3 is expected to be an array or sorting flag that has not already been specified, %sarray_multisort_variation3.php(%d) -bool(false) +Argument #3 is expected to be an array or sorting flag that has not already been specified --int 1-- -Error: 2 - array_multisort(): Argument #3 is expected to be an array or sorting flag that has not already been specified, %sarray_multisort_variation3.php(%d) -bool(false) +Argument #3 is expected to be an array or sorting flag that has not already been specified --int 12345-- -Error: 2 - array_multisort(): Argument #3 is an unknown sort flag, %sarray_multisort_variation3.php(%d) -bool(false) +Argument #3 is an unknown sort flag --int -12345-- -Error: 2 - array_multisort(): Argument #3 is an unknown sort flag, %sarray_multisort_variation3.php(%d) -bool(false) +Argument #3 is an unknown sort flag --float 10.5-- -Error: 2 - array_multisort(): Argument #3 is expected to be an array or a sort flag, %sarray_multisort_variation3.php(%d) -bool(false) +Argument #3 is expected to be an array or a sort flag --float -10.5-- -Error: 2 - array_multisort(): Argument #3 is expected to be an array or a sort flag, %sarray_multisort_variation3.php(%d) -bool(false) +Argument #3 is expected to be an array or a sort flag --float 12.3456789000e10-- -Error: 2 - array_multisort(): Argument #3 is expected to be an array or a sort flag, %sarray_multisort_variation3.php(%d) -bool(false) +Argument #3 is expected to be an array or a sort flag --float -12.3456789000e10-- -Error: 2 - array_multisort(): Argument #3 is expected to be an array or a sort flag, %sarray_multisort_variation3.php(%d) -bool(false) +Argument #3 is expected to be an array or a sort flag --float .5-- -Error: 2 - array_multisort(): Argument #3 is expected to be an array or a sort flag, %sarray_multisort_variation3.php(%d) -bool(false) +Argument #3 is expected to be an array or a sort flag --uppercase NULL-- -Error: 2 - array_multisort(): Argument #3 is expected to be an array or a sort flag, %sarray_multisort_variation3.php(%d) -bool(false) +Argument #3 is expected to be an array or a sort flag --lowercase null-- -Error: 2 - array_multisort(): Argument #3 is expected to be an array or a sort flag, %sarray_multisort_variation3.php(%d) -bool(false) +Argument #3 is expected to be an array or a sort flag --lowercase true-- -Error: 2 - array_multisort(): Argument #3 is expected to be an array or a sort flag, %sarray_multisort_variation3.php(%d) -bool(false) +Argument #3 is expected to be an array or a sort flag --lowercase false-- -Error: 2 - array_multisort(): Argument #3 is expected to be an array or a sort flag, %sarray_multisort_variation3.php(%d) -bool(false) +Argument #3 is expected to be an array or a sort flag --uppercase TRUE-- -Error: 2 - array_multisort(): Argument #3 is expected to be an array or a sort flag, %sarray_multisort_variation3.php(%d) -bool(false) +Argument #3 is expected to be an array or a sort flag --uppercase FALSE-- -Error: 2 - array_multisort(): Argument #3 is expected to be an array or a sort flag, %sarray_multisort_variation3.php(%d) -bool(false) +Argument #3 is expected to be an array or a sort flag --empty string DQ-- -Error: 2 - array_multisort(): Argument #3 is expected to be an array or a sort flag, %sarray_multisort_variation3.php(%d) -bool(false) +Argument #3 is expected to be an array or a sort flag --empty string SQ-- -Error: 2 - array_multisort(): Argument #3 is expected to be an array or a sort flag, %sarray_multisort_variation3.php(%d) -bool(false) +Argument #3 is expected to be an array or a sort flag --string DQ-- -Error: 2 - array_multisort(): Argument #3 is expected to be an array or a sort flag, %sarray_multisort_variation3.php(%d) -bool(false) +Argument #3 is expected to be an array or a sort flag --string SQ-- -Error: 2 - array_multisort(): Argument #3 is expected to be an array or a sort flag, %sarray_multisort_variation3.php(%d) -bool(false) +Argument #3 is expected to be an array or a sort flag --mixed case string-- -Error: 2 - array_multisort(): Argument #3 is expected to be an array or a sort flag, %sarray_multisort_variation3.php(%d) -bool(false) +Argument #3 is expected to be an array or a sort flag --heredoc-- -Error: 2 - array_multisort(): Argument #3 is expected to be an array or a sort flag, %sarray_multisort_variation3.php(%d) -bool(false) +Argument #3 is expected to be an array or a sort flag --instance of classWithToString-- -Error: 2 - array_multisort(): Argument #3 is expected to be an array or a sort flag, %sarray_multisort_variation3.php(%d) -bool(false) +Argument #3 is expected to be an array or a sort flag --instance of classWithoutToString-- -Error: 2 - array_multisort(): Argument #3 is expected to be an array or a sort flag, %sarray_multisort_variation3.php(%d) -bool(false) +Argument #3 is expected to be an array or a sort flag --undefined var-- -Error: 2 - array_multisort(): Argument #3 is expected to be an array or a sort flag, %sarray_multisort_variation3.php(%d) -bool(false) +Argument #3 is expected to be an array or a sort flag --unset var-- -Error: 2 - array_multisort(): Argument #3 is expected to be an array or a sort flag, %sarray_multisort_variation3.php(%d) -bool(false) +Argument #3 is expected to be an array or a sort flag ===DONE=== diff --git a/ext/standard/tests/array/bug77395.phpt b/ext/standard/tests/array/bug77395.phpt index 7910e36982dcc..b90e9dd9765dd 100644 --- a/ext/standard/tests/array/bug77395.phpt +++ b/ext/standard/tests/array/bug77395.phpt @@ -10,7 +10,12 @@ function error_handle($level, $message, $file = '', $line = 0){ } set_error_handler('error_handle'); $data = [['aa'=> 'bb',], ['aa'=> 'bb',],]; -array_multisort(array_column($data, 'bb'),SORT_DESC, $data); // PHP Warning error + +try { + array_multisort(array_column($data, 'bb'),SORT_DESC, $data); // PHP Warning error +} catch (\Error $e) { + echo $e->getMessage() . "\n"; +} ?> --EXPECT-- -array_multisort(): Array sizes are inconsistent +Array sizes are inconsistent