]> granicus.if.org Git - php/commitdiff
Promote warnings to errors in explode()
authorGeorge Peter Banyard <girgias@php.net>
Thu, 22 Aug 2019 10:09:55 +0000 (12:09 +0200)
committerGeorge Peter Banyard <girgias@php.net>
Mon, 26 Aug 2019 09:35:03 +0000 (11:35 +0200)
ext/standard/string.c
ext/standard/tests/strings/explode.phpt
ext/standard/tests/strings/explode1.phpt

index 823d1ab4c1cbd07815c925a45b885eabc362ceaf..7d7d0faaa0cffc04e93be7946951730ea9ff6fc8 100644 (file)
@@ -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);
                }
index 84cdcb985fef648c65f6d4de70c5c71af766b5a4..8fa3b6207926465ebea1e6294afc5edf6eb5f355 100644 (file)
@@ -8,21 +8,40 @@ error_reporting=2047
 <?php
 /* From http://bugs.php.net/19865 */
 echo var_export(explode("\1", "a". chr(1). "b". chr(0). "d" . chr(1) . "f" . chr(1). "1" . chr(1) . "d"), TRUE);
+echo "\n";
 echo md5(var_export(explode("\1", "a". chr(1). "b". chr(0). "d" . chr(1) . "f" . chr(1). "1" . chr(1) . "d"), TRUE));
 echo "\n";
-var_dump(@explode("", ""));
-var_dump(@explode("", NULL));
-var_dump(@explode(NULL, ""));
-var_dump(@explode("a", ""));
-var_dump(@explode("a", "a"));
-var_dump(@explode("a", NULL));
-var_dump(@explode(NULL, "a"));
-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)));
+
+try {
+    var_dump(explode("", ""));
+} catch (\Error $e) {
+    echo $e->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"
index de3049a47b3a8b93cbdc53bed4d381ffb47f8601..4d692e49e8041ea4f8eef309d177cbbedce15140 100644 (file)
@@ -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]=>