Skip to content

Commit 4bbd9d8

Browse files
committed
Fix phpGH-8924 str_split of empty string must return empty array
1 parent d9c49ae commit 4bbd9d8

File tree

2 files changed

+20
-5
lines changed

2 files changed

+20
-5
lines changed

ext/standard/string.c

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5882,9 +5882,14 @@ PHP_FUNCTION(str_split)
58825882
RETURN_THROWS();
58835883
}
58845884

5885-
if (0 == ZSTR_LEN(str) || (size_t)split_length >= ZSTR_LEN(str)) {
5886-
array_init_size(return_value, 1);
5887-
add_next_index_stringl(return_value, ZSTR_VAL(str), ZSTR_LEN(str));
5885+
if ((size_t)split_length >= ZSTR_LEN(str)) {
5886+
if (0 == ZSTR_LEN(str)) {
5887+
array_init_size(return_value, 0);
5888+
} else {
5889+
array_init_size(return_value, 1);
5890+
add_next_index_stringl(return_value, ZSTR_VAL(str), ZSTR_LEN(str));
5891+
}
5892+
58885893
return;
58895894
}
58905895

ext/standard/tests/strings/str_split_basic.phpt

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,11 @@ var_dump( str_split($str,$split_length) );
1616
echo "-- With split_length as default argument --\n";
1717
var_dump( str_split($str) );
1818

19-
echo "Done"
19+
echo "-- Empty string must always return empty array --\n";
20+
var_dump( str_split('') );
21+
var_dump( str_split('', 1) );
22+
var_dump( str_split('', 100) );
23+
2024
?>
2125
--EXPECT--
2226
*** Testing str_split() : basic functionality ***
@@ -80,4 +84,10 @@ array(22) {
8084
[21]=>
8185
string(1) "e"
8286
}
83-
Done
87+
-- Empty string must always return empty array --
88+
array(0) {
89+
}
90+
array(0) {
91+
}
92+
array(0) {
93+
}

0 commit comments

Comments
 (0)