Skip to content

Commit

Permalink
Promote warnings to errors in array_multisort()
Browse files Browse the repository at this point in the history
  • Loading branch information
Girgias committed Aug 21, 2019
1 parent c70f92c commit eaf66df
Show file tree
Hide file tree
Showing 6 changed files with 122 additions and 178 deletions.
12 changes: 6 additions & 6 deletions ext/standard/array.c
Expand Up @@ -5613,7 +5613,7 @@ PHPAPI int php_multisort_compare(const void *a, const void *b) /* {{{ */
#define MULTISORT_ABORT \
efree(func); \
efree(arrays); \
RETURN_FALSE;
return;

static void array_bucket_p_sawp(void *p, void *q) /* {{{ */ {
Bucket *t;
Expand Down Expand Up @@ -5690,7 +5690,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 @@ -5706,19 +5706,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 @@ -5729,7 +5729,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
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
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
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===

0 comments on commit eaf66df

Please sign in to comment.