Fixing incorrect error message when passing null to join/implode's array parameter (#12683)

Closes GH-12682
This commit is contained in:
Vinicius Dias 2023-12-01 06:55:20 -03:00 committed by GitHub
parent c779bdc953
commit f1af7223f8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 55 additions and 71 deletions

View file

@ -1035,7 +1035,11 @@ PHP_FUNCTION(implode)
if (pieces == NULL) {
if (arg1_array == NULL) {
zend_type_error("%s(): Argument #1 ($array) must be of type array, string given", get_active_function_name());
zend_type_error(
"%s(): If argument #1 ($separator) is of type string, "
"argument #2 ($array) must be of type array, null given",
get_active_function_name()
);
RETURN_THROWS();
}

View file

@ -0,0 +1,29 @@
--TEST--
Test implode() function: error conditions
--FILE--
<?php
/* only glue */
try {
var_dump(implode("glue"));
} catch (TypeError $e) {
echo $e->getMessage(), "\n";
}
/* NULL as pieces */
try {
var_dump(implode("glue", NULL));
} catch (TypeError $e) {
echo $e->getMessage(), "\n";
}
/* integer as glue */
try {
var_dump(implode(12, "pieces"));
} catch (TypeError $e) {
echo $e->getMessage(), "\n";
}
?>
--EXPECT--
implode(): If argument #1 ($separator) is of type string, argument #2 ($array) must be of type array, null given
implode(): If argument #1 ($separator) is of type string, argument #2 ($array) must be of type array, null given
implode(): Argument #2 ($array) must be of type ?array, string given

View file

@ -9,7 +9,8 @@ $arrays = array (
array(array(2),array(1)),
array(false,true),
array(),
array("a","aaaa","b","bbbb","c","ccccccccccccccccccccc")
array("a","aaaa","b","bbbb","c","ccccccccccccccccccccc"),
array(NULL),
);
/* loop to output string with ', ' as $glue, using implode() */
foreach ($arrays as $array) {
@ -106,50 +107,6 @@ $resources = array($file_handle, $dir_handle);
var_dump(implode("::", $resources));
echo "\n*** Testing error conditions ***\n";
/* only glue */
try {
var_dump( implode("glue") );
} catch (TypeError $e) {
echo $e->getMessage(), "\n";
}
/* int as pieces */
try {
var_dump( implode("glue",1234) );
} catch (TypeError $e) {
echo $e->getMessage(), "\n";
}
/* NULL as pieces */
try {
var_dump( implode("glue", NULL) );
} catch (TypeError $e) {
echo $e->getMessage(), "\n";
}
/* pieces as NULL array */
try {
var_dump( implode(",", array(NULL)) );
} catch (TypeError $e) {
echo $e->getMessage(), "\n";
}
/* integer as glue */
try {
var_dump( implode(12, "pieces") );
} catch (TypeError $e) {
echo $e->getMessage(), "\n";
}
/* NULL as glue */
try {
var_dump( implode(NULL, "abcd") );
} catch (TypeError $e) {
echo $e->getMessage(), "\n";
}
/* closing resource handles */
fclose($file_handle);
closedir($dir_handle);
@ -214,6 +171,11 @@ array(6) {
[5]=>
string(21) "ccccccccccccccccccccc"
}
string(0) ""
array(1) {
[0]=>
NULL
}
*** Testing implode() with variations of glue ***
-- Iteration 1 --
@ -236,7 +198,7 @@ string(35) "2000-639010PHP000 0string%0with%0...%0"
string(43) "2\00\0-639\01\0PHP\0\0\0 \0string%0with%0...%0"
*** Testing implode() on empty string ***
implode(): Argument #1 ($array) must be of type array, string given
implode(): If argument #1 ($separator) is of type string, argument #2 ($array) must be of type array, null given
*** Testing implode() on sub-arrays ***
@ -264,14 +226,4 @@ array(2) {
*** Testing end() on resource type ***
string(%d) "Resource id #%d::Resource id #%d"
*** Testing error conditions ***
implode(): Argument #1 ($array) must be of type array, string given
implode(): Argument #2 ($array) must be of type ?array, int given
implode(): Argument #1 ($array) must be of type array, string given
string(0) ""
implode(): Argument #2 ($array) must be of type ?array, string given
Deprecated: implode(): Passing null to parameter #1 ($separator) of type array|string is deprecated in %s on line %d
implode(): Argument #2 ($array) must be of type ?array, string given
Done

View file

@ -20,5 +20,5 @@ echo "Done\n";
*** Testing join() : error conditions ***
-- Testing join() with less than expected no. of arguments --
join(): Argument #1 ($array) must be of type array, string given
join(): If argument #1 ($separator) is of type string, argument #2 ($array) must be of type array, null given
Done

View file

@ -29,7 +29,6 @@ class test
// array with different values
$values = array (
// integer values
0,
1,
@ -138,13 +137,13 @@ join(): Argument #2 ($array) must be of type ?array, string given
-- Iteration 18 --
join(): Argument #2 ($array) must be of type ?array, string given
-- Iteration 19 --
join(): Argument #1 ($array) must be of type array, string given
join(): If argument #1 ($separator) is of type string, argument #2 ($array) must be of type array, null given
-- Iteration 20 --
join(): Argument #1 ($array) must be of type array, string given
join(): If argument #1 ($separator) is of type string, argument #2 ($array) must be of type array, null given
-- Iteration 21 --
join(): Argument #2 ($array) must be of type ?array, resource given
-- Iteration 22 --
join(): Argument #1 ($array) must be of type array, string given
join(): If argument #1 ($separator) is of type string, argument #2 ($array) must be of type array, null given
-- Iteration 23 --
join(): Argument #1 ($array) must be of type array, string given
join(): If argument #1 ($separator) is of type string, argument #2 ($array) must be of type array, null given
Done