Skip to content

Commit 91f4e2e

Browse files
committed
Promote warnings to errors in explode()
1 parent 06a4a9b commit 91f4e2e

File tree

3 files changed

+77
-64
lines changed

3 files changed

+77
-64
lines changed

ext/standard/string.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1129,7 +1129,7 @@ PHPAPI void php_explode_negative_limit(const zend_string *delim, zend_string *st
11291129
}
11301130
/* }}} */
11311131

1132-
/* {{{ proto array|false explode(string separator, string str [, int limit])
1132+
/* {{{ proto array explode(string separator, string str [, int limit])
11331133
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. */
11341134
PHP_FUNCTION(explode)
11351135
{
@@ -1145,14 +1145,14 @@ PHP_FUNCTION(explode)
11451145
ZEND_PARSE_PARAMETERS_END();
11461146

11471147
if (ZSTR_LEN(delim) == 0) {
1148-
php_error_docref(NULL, E_WARNING, "Empty delimiter");
1149-
RETURN_FALSE;
1148+
zend_throw_error(NULL, "Empty delimiter");
1149+
return;
11501150
}
11511151

11521152
array_init(return_value);
11531153

11541154
if (ZSTR_LEN(str) == 0) {
1155-
if (limit >= 0) {
1155+
if (limit >= 0) {
11561156
ZVAL_EMPTY_STRING(&tmp);
11571157
zend_hash_index_add_new(Z_ARRVAL_P(return_value), 0, &tmp);
11581158
}

ext/standard/tests/strings/explode.phpt

Lines changed: 38 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -8,21 +8,40 @@ error_reporting=2047
88
<?php
99
/* From http://bugs.php.net/19865 */
1010
echo var_export(explode("\1", "a". chr(1). "b". chr(0). "d" . chr(1) . "f" . chr(1). "1" . chr(1) . "d"), TRUE);
11+
echo "\n";
1112
echo md5(var_export(explode("\1", "a". chr(1). "b". chr(0). "d" . chr(1) . "f" . chr(1). "1" . chr(1) . "d"), TRUE));
1213
echo "\n";
13-
var_dump(@explode("", ""));
14-
var_dump(@explode("", NULL));
15-
var_dump(@explode(NULL, ""));
16-
var_dump(@explode("a", ""));
17-
var_dump(@explode("a", "a"));
18-
var_dump(@explode("a", NULL));
19-
var_dump(@explode(NULL, "a"));
20-
var_dump(@explode("abc", "acb"));
21-
var_dump(@explode("somestring", "otherstring"));
22-
var_dump(@explode("somestring", "otherstring", -1));
23-
var_dump(@explode("a", "aaaaaa"));
24-
var_dump(@explode("==", str_repeat("-=".ord(0)."=-", 10)));
25-
var_dump(@explode("=", str_repeat("-=".ord(0)."=-", 10)));
14+
15+
try {
16+
var_dump(explode("", ""));
17+
} catch (\Error $e) {
18+
echo $e->getMessage() . "\n";
19+
}
20+
try {
21+
var_dump(explode("", NULL));
22+
} catch (\Error $e) {
23+
echo $e->getMessage() . "\n";
24+
}
25+
try {
26+
var_dump(explode(NULL, ""));
27+
} catch (\Error $e) {
28+
echo $e->getMessage() . "\n";
29+
}
30+
31+
var_dump(explode("a", ""));
32+
var_dump(explode("a", "a"));
33+
var_dump(explode("a", NULL));
34+
try {
35+
var_dump(explode(NULL, "a"));
36+
} catch (\Error $e) {
37+
echo $e->getMessage() . "\n";
38+
}
39+
var_dump(explode("abc", "acb"));
40+
var_dump(explode("somestring", "otherstring"));
41+
var_dump(explode("somestring", "otherstring", -1));
42+
var_dump(explode("a", "aaaaaa"));
43+
var_dump(explode("==", str_repeat("-=".ord(0)."=-", 10)));
44+
var_dump(explode("=", str_repeat("-=".ord(0)."=-", 10)));
2645
//////////////////////////////////////
2746
var_dump(explode(":","a lazy dog:jumps:over:",-1));
2847
var_dump(explode(":","a lazy dog:jumps:over", -1));
@@ -39,10 +58,11 @@ array (
3958
2 => 'f',
4059
3 => '1',
4160
4 => 'd',
42-
)d6bee42a771449205344c0938ad4f035
43-
bool(false)
44-
bool(false)
45-
bool(false)
61+
)
62+
d6bee42a771449205344c0938ad4f035
63+
Empty delimiter
64+
Empty delimiter
65+
Empty delimiter
4666
array(1) {
4767
[0]=>
4868
string(0) ""
@@ -57,7 +77,7 @@ array(1) {
5777
[0]=>
5878
string(0) ""
5979
}
60-
bool(false)
80+
Empty delimiter
6181
array(1) {
6282
[0]=>
6383
string(3) "acb"

ext/standard/tests/strings/explode1.phpt

Lines changed: 35 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,29 @@ $string = "1234NULL23abcd00000TRUEFALSE-11.234444true-11.24%PHP%ZEND";
3232
*/
3333
$counter = 1;
3434
foreach($delimiters as $delimiter) {
35-
echo "-- Iteration $counter --\n";
36-
var_dump( explode($delimiter, $string, -1) );
37-
var_dump( explode($delimiter, $string, 0) );
38-
var_dump( explode($delimiter, $string, 1) );
39-
var_dump( explode($delimiter, $string, 2) );
40-
$counter++;
35+
echo "-- Iteration $counter --\n";
36+
37+
try {
38+
var_dump( explode($delimiter, $string, -1) );
39+
} catch (\Error $e) {
40+
echo $e->getMessage() . "\n";
41+
}
42+
try {
43+
var_dump( explode($delimiter, $string, 0) );
44+
} catch (\Error $e) {
45+
echo $e->getMessage() . "\n";
46+
}
47+
try {
48+
var_dump( explode($delimiter, $string, 1) );
49+
} catch (\Error $e) {
50+
echo $e->getMessage() . "\n";
51+
}
52+
try {
53+
var_dump( explode($delimiter, $string, 2) );
54+
} catch (\Error $e) {
55+
echo $e->getMessage() . "\n";
56+
}
57+
$counter++;
4158
}
4259

4360
echo "\n*** Testing explode() with miscelleneous input arguments ***\n";
@@ -82,31 +99,15 @@ echo "Done\n";
8299
--EXPECTF--
83100
*** Testing explode() for basic operations ***
84101
-- Iteration 1 --
85-
86-
Warning: explode(): Empty delimiter in %s on line %d
87-
bool(false)
88-
89-
Warning: explode(): Empty delimiter in %s on line %d
90-
bool(false)
91-
92-
Warning: explode(): Empty delimiter in %s on line %d
93-
bool(false)
94-
95-
Warning: explode(): Empty delimiter in %s on line %d
96-
bool(false)
102+
Empty delimiter
103+
Empty delimiter
104+
Empty delimiter
105+
Empty delimiter
97106
-- Iteration 2 --
98-
99-
Warning: explode(): Empty delimiter in %s on line %d
100-
bool(false)
101-
102-
Warning: explode(): Empty delimiter in %s on line %d
103-
bool(false)
104-
105-
Warning: explode(): Empty delimiter in %s on line %d
106-
bool(false)
107-
108-
Warning: explode(): Empty delimiter in %s on line %d
109-
bool(false)
107+
Empty delimiter
108+
Empty delimiter
109+
Empty delimiter
110+
Empty delimiter
110111
-- Iteration 3 --
111112
array(1) {
112113
[0]=>
@@ -208,18 +209,10 @@ array(2) {
208209
string(56) "234NULL23abcd00000TRUEFALSE-11.234444true-11.24%PHP%ZEND"
209210
}
210211
-- Iteration 7 --
211-
212-
Warning: explode(): Empty delimiter in %s on line %d
213-
bool(false)
214-
215-
Warning: explode(): Empty delimiter in %s on line %d
216-
bool(false)
217-
218-
Warning: explode(): Empty delimiter in %s on line %d
219-
bool(false)
220-
221-
Warning: explode(): Empty delimiter in %s on line %d
222-
bool(false)
212+
Empty delimiter
213+
Empty delimiter
214+
Empty delimiter
215+
Empty delimiter
223216
-- Iteration 8 --
224217
array(2) {
225218
[0]=>

0 commit comments

Comments
 (0)