Skip to content

Promote warnings to errors in array_multisort() #4575

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions ext/standard/array.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
}
}
Expand All @@ -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;
}
}
Expand Down
22 changes: 13 additions & 9 deletions ext/standard/tests/array/array_multisort_error.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -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===
83 changes: 31 additions & 52 deletions ext/standard/tests/array/array_multisort_variation1.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -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===
88 changes: 33 additions & 55 deletions ext/standard/tests/array/array_multisort_variation2.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -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--
Expand All @@ -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===
Loading