From 2ac65bf03cd1cd57419d957dc352827eff2e8efd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Vo=C5=99=C3=AD=C5=A1ek?= Date: Thu, 7 Jul 2022 12:49:09 +0200 Subject: [PATCH] Fix GH-8924 str_split of empty string must return empty array Co-authored-by: Christoph M. Becker --- ext/standard/string.c | 6 +++++- ext/standard/tests/strings/str_split_basic.phpt | 14 ++++++++++++-- .../tests/strings/str_split_variation3.phpt | 4 +--- .../tests/strings/str_split_variation4.phpt | 4 +--- .../tests/strings/str_split_variation5.phpt | 8 ++------ 5 files changed, 21 insertions(+), 15 deletions(-) diff --git a/ext/standard/string.c b/ext/standard/string.c index 699bccbae6af9..bf46c90fd18b9 100644 --- a/ext/standard/string.c +++ b/ext/standard/string.c @@ -5882,7 +5882,11 @@ PHP_FUNCTION(str_split) RETURN_THROWS(); } - if (0 == ZSTR_LEN(str) || (size_t)split_length >= ZSTR_LEN(str)) { + if ((size_t)split_length >= ZSTR_LEN(str)) { + if (0 == ZSTR_LEN(str)) { + RETURN_EMPTY_ARRAY(); + } + array_init_size(return_value, 1); add_next_index_stringl(return_value, ZSTR_VAL(str), ZSTR_LEN(str)); return; diff --git a/ext/standard/tests/strings/str_split_basic.phpt b/ext/standard/tests/strings/str_split_basic.phpt index ce0f1004c7a05..86bf288464229 100644 --- a/ext/standard/tests/strings/str_split_basic.phpt +++ b/ext/standard/tests/strings/str_split_basic.phpt @@ -16,7 +16,11 @@ var_dump( str_split($str,$split_length) ); echo "-- With split_length as default argument --\n"; var_dump( str_split($str) ); -echo "Done" +echo "-- Empty string must always return empty array --\n"; +var_dump( str_split('') ); +var_dump( str_split('', 1) ); +var_dump( str_split('', 100) ); + ?> --EXPECT-- *** Testing str_split() : basic functionality *** @@ -80,4 +84,10 @@ array(22) { [21]=> string(1) "e" } -Done +-- Empty string must always return empty array -- +array(0) { +} +array(0) { +} +array(0) { +} diff --git a/ext/standard/tests/strings/str_split_variation3.phpt b/ext/standard/tests/strings/str_split_variation3.phpt index 7003d62eaa1fb..53a78244c56a5 100644 --- a/ext/standard/tests/strings/str_split_variation3.phpt +++ b/ext/standard/tests/strings/str_split_variation3.phpt @@ -39,9 +39,7 @@ echo "Done" --EXPECTF-- *** Testing str_split() : double quoted strings for 'str' *** -- Iteration 1 -- -array(1) { - [0]=> - string(0) "" +array(0) { } -- Iteration 2 -- array(1) { diff --git a/ext/standard/tests/strings/str_split_variation4.phpt b/ext/standard/tests/strings/str_split_variation4.phpt index b10fd0c7d9e3c..c3c71bd0c52e7 100644 --- a/ext/standard/tests/strings/str_split_variation4.phpt +++ b/ext/standard/tests/strings/str_split_variation4.phpt @@ -38,9 +38,7 @@ echo "Done" --EXPECT-- *** Testing str_split() : single quoted strings for 'str' *** -- Iteration 1 -- -array(1) { - [0]=> - string(0) "" +array(0) { } -- Iteration 2 -- array(1) { diff --git a/ext/standard/tests/strings/str_split_variation5.phpt b/ext/standard/tests/strings/str_split_variation5.phpt index 02c7d61eb13b1..656bcad7d1ad5 100644 --- a/ext/standard/tests/strings/str_split_variation5.phpt +++ b/ext/standard/tests/strings/str_split_variation5.phpt @@ -81,14 +81,10 @@ echo "Done" --EXPECT-- *** Testing str_split() : heredoc strings as 'str' argument *** -- Iteration 1 -- -array(1) { - [0]=> - string(0) "" +array(0) { } -- Iteration 2 -- -array(1) { - [0]=> - string(0) "" +array(0) { } -- Iteration 3 -- array(1) {