From 91f4e2e61493d06db8b6fbbccbd0e4166d86f48f Mon Sep 17 00:00:00 2001 From: George Peter Banyard Date: Thu, 22 Aug 2019 12:09:55 +0200 Subject: [PATCH] Promote warnings to errors in explode() --- ext/standard/string.c | 8 +-- ext/standard/tests/strings/explode.phpt | 56 +++++++++++------ ext/standard/tests/strings/explode1.phpt | 77 +++++++++++------------- 3 files changed, 77 insertions(+), 64 deletions(-) diff --git a/ext/standard/string.c b/ext/standard/string.c index 823d1ab4c1..7d7d0faaa0 100644 --- a/ext/standard/string.c +++ b/ext/standard/string.c @@ -1129,7 +1129,7 @@ PHPAPI void php_explode_negative_limit(const zend_string *delim, zend_string *st } /* }}} */ -/* {{{ proto array|false explode(string separator, string str [, int limit]) +/* {{{ proto array explode(string separator, string str [, int limit]) Splits a string on string separator and return array of components. If limit is positive only limit number of components is returned. If limit is negative all components except the last abs(limit) are returned. */ PHP_FUNCTION(explode) { @@ -1145,14 +1145,14 @@ PHP_FUNCTION(explode) ZEND_PARSE_PARAMETERS_END(); if (ZSTR_LEN(delim) == 0) { - php_error_docref(NULL, E_WARNING, "Empty delimiter"); - RETURN_FALSE; + zend_throw_error(NULL, "Empty delimiter"); + return; } array_init(return_value); if (ZSTR_LEN(str) == 0) { - if (limit >= 0) { + if (limit >= 0) { ZVAL_EMPTY_STRING(&tmp); zend_hash_index_add_new(Z_ARRVAL_P(return_value), 0, &tmp); } diff --git a/ext/standard/tests/strings/explode.phpt b/ext/standard/tests/strings/explode.phpt index 84cdcb985f..8fa3b62079 100644 --- a/ext/standard/tests/strings/explode.phpt +++ b/ext/standard/tests/strings/explode.phpt @@ -8,21 +8,40 @@ error_reporting=2047 getMessage() . "\n"; +} +try { + var_dump(explode("", NULL)); +} catch (\Error $e) { + echo $e->getMessage() . "\n"; +} +try { + var_dump(explode(NULL, "")); +} catch (\Error $e) { + echo $e->getMessage() . "\n"; +} + +var_dump(explode("a", "")); +var_dump(explode("a", "a")); +var_dump(explode("a", NULL)); +try { + var_dump(explode(NULL, "a")); +} catch (\Error $e) { + echo $e->getMessage() . "\n"; +} +var_dump(explode("abc", "acb")); +var_dump(explode("somestring", "otherstring")); +var_dump(explode("somestring", "otherstring", -1)); +var_dump(explode("a", "aaaaaa")); +var_dump(explode("==", str_repeat("-=".ord(0)."=-", 10))); +var_dump(explode("=", str_repeat("-=".ord(0)."=-", 10))); ////////////////////////////////////// var_dump(explode(":","a lazy dog:jumps:over:",-1)); var_dump(explode(":","a lazy dog:jumps:over", -1)); @@ -39,10 +58,11 @@ array ( 2 => 'f', 3 => '1', 4 => 'd', -)d6bee42a771449205344c0938ad4f035 -bool(false) -bool(false) -bool(false) +) +d6bee42a771449205344c0938ad4f035 +Empty delimiter +Empty delimiter +Empty delimiter array(1) { [0]=> string(0) "" @@ -57,7 +77,7 @@ array(1) { [0]=> string(0) "" } -bool(false) +Empty delimiter array(1) { [0]=> string(3) "acb" diff --git a/ext/standard/tests/strings/explode1.phpt b/ext/standard/tests/strings/explode1.phpt index de3049a47b..4d692e49e8 100644 --- a/ext/standard/tests/strings/explode1.phpt +++ b/ext/standard/tests/strings/explode1.phpt @@ -32,12 +32,29 @@ $string = "1234NULL23abcd00000TRUEFALSE-11.234444true-11.24%PHP%ZEND"; */ $counter = 1; foreach($delimiters as $delimiter) { - echo "-- Iteration $counter --\n"; - var_dump( explode($delimiter, $string, -1) ); - var_dump( explode($delimiter, $string, 0) ); - var_dump( explode($delimiter, $string, 1) ); - var_dump( explode($delimiter, $string, 2) ); - $counter++; + echo "-- Iteration $counter --\n"; + + try { + var_dump( explode($delimiter, $string, -1) ); + } catch (\Error $e) { + echo $e->getMessage() . "\n"; + } + try { + var_dump( explode($delimiter, $string, 0) ); + } catch (\Error $e) { + echo $e->getMessage() . "\n"; + } + try { + var_dump( explode($delimiter, $string, 1) ); + } catch (\Error $e) { + echo $e->getMessage() . "\n"; + } + try { + var_dump( explode($delimiter, $string, 2) ); + } catch (\Error $e) { + echo $e->getMessage() . "\n"; + } + $counter++; } echo "\n*** Testing explode() with miscelleneous input arguments ***\n"; @@ -82,31 +99,15 @@ echo "Done\n"; --EXPECTF-- *** Testing explode() for basic operations *** -- Iteration 1 -- - -Warning: explode(): Empty delimiter in %s on line %d -bool(false) - -Warning: explode(): Empty delimiter in %s on line %d -bool(false) - -Warning: explode(): Empty delimiter in %s on line %d -bool(false) - -Warning: explode(): Empty delimiter in %s on line %d -bool(false) +Empty delimiter +Empty delimiter +Empty delimiter +Empty delimiter -- Iteration 2 -- - -Warning: explode(): Empty delimiter in %s on line %d -bool(false) - -Warning: explode(): Empty delimiter in %s on line %d -bool(false) - -Warning: explode(): Empty delimiter in %s on line %d -bool(false) - -Warning: explode(): Empty delimiter in %s on line %d -bool(false) +Empty delimiter +Empty delimiter +Empty delimiter +Empty delimiter -- Iteration 3 -- array(1) { [0]=> @@ -208,18 +209,10 @@ array(2) { string(56) "234NULL23abcd00000TRUEFALSE-11.234444true-11.24%PHP%ZEND" } -- Iteration 7 -- - -Warning: explode(): Empty delimiter in %s on line %d -bool(false) - -Warning: explode(): Empty delimiter in %s on line %d -bool(false) - -Warning: explode(): Empty delimiter in %s on line %d -bool(false) - -Warning: explode(): Empty delimiter in %s on line %d -bool(false) +Empty delimiter +Empty delimiter +Empty delimiter +Empty delimiter -- Iteration 8 -- array(2) { [0]=> -- 2.50.1