Skip to content

Commit 986da2a

Browse files
committed
Convert warnings to ValueError in mb_strpos function family.
Closes GH-5109
1 parent ebd00c5 commit 986da2a

16 files changed

+454
-418
lines changed

ext/mbstring/mbstring.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2084,13 +2084,13 @@ static void handle_strpos_error(size_t error) {
20842084
case MBFL_ERROR_NOT_FOUND:
20852085
break;
20862086
case MBFL_ERROR_ENCODING:
2087-
php_error_docref(NULL, E_WARNING, "Unknown encoding or conversion error");
2087+
php_error_docref(NULL, E_WARNING, "Conversion error");
20882088
break;
20892089
case MBFL_ERROR_OFFSET:
2090-
php_error_docref(NULL, E_WARNING, "Offset not contained in string");
2090+
zend_value_error("Offset not contained in string");
20912091
break;
20922092
default:
2093-
php_error_docref(NULL, E_WARNING, "Unknown error in mb_strpos");
2093+
zend_value_error("Unknown error in mb_strpos");
20942094
break;
20952095
}
20962096
}

ext/mbstring/tests/bug43840.phpt

Lines changed: 17 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,20 @@ $needle = base64_decode('44CC');
2626
foreach($offsets as $i) {
2727
echo "\n-- Offset is $i --\n";
2828
echo "--Multibyte String:--\n";
29-
var_dump( mb_strpos($string_mb, $needle, $i, 'UTF-8') );
29+
try {
30+
var_dump( mb_strpos($string_mb, $needle, $i, 'UTF-8') );
31+
} catch (\ValueError $e) {
32+
echo $e->getMessage() . \PHP_EOL;
33+
}
3034
echo"--ASCII String:--\n";
31-
var_dump(mb_strpos('This is na English ta', 'a', $i));
35+
try {
36+
var_dump(mb_strpos('This is na English ta', 'a', $i));
37+
} catch (\ValueError $e) {
38+
echo $e->getMessage() . \PHP_EOL;
39+
}
3240
}
3341
?>
34-
--EXPECTF--
42+
--EXPECT--
3543
-- Offset is 20 --
3644
--Multibyte String:--
3745
int(20)
@@ -46,30 +54,18 @@ bool(false)
4654

4755
-- Offset is 22 --
4856
--Multibyte String:--
49-
50-
Warning: mb_strpos(): Offset not contained in string in %s on line %d
51-
bool(false)
57+
Offset not contained in string
5258
--ASCII String:--
53-
54-
Warning: mb_strpos(): Offset not contained in string in %s on line %d
55-
bool(false)
59+
Offset not contained in string
5660

5761
-- Offset is 53 --
5862
--Multibyte String:--
59-
60-
Warning: mb_strpos(): Offset not contained in string in %s on line %d
61-
bool(false)
63+
Offset not contained in string
6264
--ASCII String:--
63-
64-
Warning: mb_strpos(): Offset not contained in string in %s on line %d
65-
bool(false)
65+
Offset not contained in string
6666

6767
-- Offset is 54 --
6868
--Multibyte String:--
69-
70-
Warning: mb_strpos(): Offset not contained in string in %s on line %d
71-
bool(false)
69+
Offset not contained in string
7270
--ASCII String:--
73-
74-
Warning: mb_strpos(): Offset not contained in string in %s on line %d
75-
bool(false)
71+
Offset not contained in string

ext/mbstring/tests/bug43841.phpt

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -17,50 +17,49 @@ function_exists('mb_strrpos') or die("skip mb_strrpos() is not available in this
1717
*/
1818

1919
$offsets = array(-25, -24, -13, -12);
20-
$string_mb =
21-
base64_decode('5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvv
22-
JfvvJjvvJnjgII=');
23-
$needle = base64_decode('44CC');
20+
// Japanese string in UTF-8
21+
$string_mb = "日本語テキストです。0123456789。";
22+
$needle = "";
2423

2524
foreach ($offsets as $i) {
2625
echo "\n-- Offset is $i --\n";
2726
echo "Multibyte String:\n";
28-
var_dump( mb_strrpos($string_mb, $needle, $i, 'UTF-8') );
27+
try {
28+
var_dump( mb_strrpos($string_mb, $needle, $i, 'UTF-8') );
29+
} catch (\ValueError $e) {
30+
echo $e->getMessage() . \PHP_EOL;
31+
}
2932
echo "ASCII String:\n";
3033
echo "mb_strrpos:\n";
31-
var_dump(mb_strrpos('This is na English ta', 'a', $i));
34+
try {
35+
var_dump(mb_strrpos('This is na English ta', 'a', $i));
36+
} catch (\ValueError $e) {
37+
echo $e->getMessage() . \PHP_EOL;
38+
}
3239
echo "strrpos:\n";
3340
try {
3441
var_dump(strrpos('This is na English ta', 'a', $i));
35-
} catch (ValueError $exception) {
36-
echo $exception->getMessage() . "\n";
42+
} catch (\ValueError $e) {
43+
echo $e->getMessage() . \PHP_EOL;
3744
}
3845
}
3946
?>
40-
--EXPECTF--
47+
--EXPECT--
4148
-- Offset is -25 --
4249
Multibyte String:
43-
44-
Warning: mb_strrpos(): Offset not contained in string in %s on line %d
45-
bool(false)
50+
Offset not contained in string
4651
ASCII String:
4752
mb_strrpos:
48-
49-
Warning: mb_strrpos(): Offset not contained in string in %s on line %d
50-
bool(false)
53+
Offset not contained in string
5154
strrpos:
5255
Offset not contained in string
5356

5457
-- Offset is -24 --
5558
Multibyte String:
56-
57-
Warning: mb_strrpos(): Offset not contained in string in %s on line %d
58-
bool(false)
59+
Offset not contained in string
5960
ASCII String:
6061
mb_strrpos:
61-
62-
Warning: mb_strrpos(): Offset not contained in string in %s on line %d
63-
bool(false)
62+
Offset not contained in string
6463
strrpos:
6564
Offset not contained in string
6665

ext/mbstring/tests/bug45923.phpt

Lines changed: 15 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,13 @@ Bug #45923 (mb_st[r]ripos() offset not handled correctly)
88
function section($func, $haystack, $needle)
99
{
1010
echo "\n------- $func -----------\n\n";
11-
foreach(array(0, 3, 6, 9, 11, 12, -1, -3, -6, -20) as $offset) {
11+
foreach([0, 3, 6, 9, 11, 12, -1, -3, -6, -20] as $offset) {
1212
echo "> Offset: $offset\n";
13-
try {
14-
var_dump($func($haystack,$needle,$offset));
15-
} catch (ValueError $exception) {
16-
echo $exception->getMessage() . "\n";
17-
}
13+
try {
14+
var_dump($func($haystack, $needle, $offset));
15+
} catch (\ValueError $e) {
16+
echo $e->getMessage() . \PHP_EOL;
17+
}
1818
}
1919
}
2020

@@ -30,7 +30,7 @@ section('mb_strrpos' , "●○◆ ●○◆ ●○◆", "●○◆");
3030
section('strripos' , "abc abc abc" , "abc");
3131
section('mb_strripos', "●○◆ ●○◆ ●○◆", "●○◆");
3232
?>
33-
--EXPECTF--
33+
--EXPECT--
3434
------- strpos -----------
3535

3636
> Offset: 0
@@ -67,19 +67,15 @@ bool(false)
6767
> Offset: 11
6868
bool(false)
6969
> Offset: 12
70-
71-
Warning: mb_strpos(): Offset not contained in string in %s on line %d
72-
bool(false)
70+
Offset not contained in string
7371
> Offset: -1
7472
bool(false)
7573
> Offset: -3
7674
int(8)
7775
> Offset: -6
7876
int(8)
7977
> Offset: -20
80-
81-
Warning: mb_strpos(): Offset not contained in string in %s on line %d
82-
bool(false)
78+
Offset not contained in string
8379

8480
------- stripos -----------
8581

@@ -117,19 +113,15 @@ bool(false)
117113
> Offset: 11
118114
bool(false)
119115
> Offset: 12
120-
121-
Warning: mb_stripos(): Offset not contained in string in %s on line %d
122-
bool(false)
116+
Offset not contained in string
123117
> Offset: -1
124118
bool(false)
125119
> Offset: -3
126120
int(8)
127121
> Offset: -6
128122
int(8)
129123
> Offset: -20
130-
131-
Warning: mb_stripos(): Offset not contained in string in %s on line %d
132-
bool(false)
124+
Offset not contained in string
133125

134126
------- strrpos -----------
135127

@@ -167,19 +159,15 @@ bool(false)
167159
> Offset: 11
168160
bool(false)
169161
> Offset: 12
170-
171-
Warning: mb_strrpos(): Offset not contained in string in %s on line %d
172-
bool(false)
162+
Offset not contained in string
173163
> Offset: -1
174164
int(8)
175165
> Offset: -3
176166
int(8)
177167
> Offset: -6
178168
int(4)
179169
> Offset: -20
180-
181-
Warning: mb_strrpos(): Offset not contained in string in %s on line %d
182-
bool(false)
170+
Offset not contained in string
183171

184172
------- strripos -----------
185173

@@ -217,16 +205,12 @@ bool(false)
217205
> Offset: 11
218206
bool(false)
219207
> Offset: 12
220-
221-
Warning: mb_strripos(): Offset not contained in string in %s on line %d
222-
bool(false)
208+
Offset not contained in string
223209
> Offset: -1
224210
int(8)
225211
> Offset: -3
226212
int(8)
227213
> Offset: -6
228214
int(4)
229215
> Offset: -20
230-
231-
Warning: mb_strripos(): Offset not contained in string in %s on line %d
232-
bool(false)
216+
Offset not contained in string

ext/mbstring/tests/mb_stripos.phpt

Lines changed: 0 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -41,30 +41,6 @@ print mb_stripos($euc_jp, 0, -15, 'EUC-JP') . "\n";
4141
print mb_stripos($euc_jp, 0, -43, 'EUC-JP') . "\n";
4242

4343

44-
// Invalid offset - should return false with warning
45-
print ("== INVALID OFFSET ==\n");
46-
47-
$r = mb_stripos($euc_jp, '日本語', 44, 'EUC-JP');
48-
($r === FALSE) ? print "OK_INVALID_OFFSET\n" : print "NG_INVALID_OFFSET\n";
49-
$r = mb_stripos($euc_jp, '日本語', 50, 'EUC-JP');
50-
($r === FALSE) ? print "OK_INVALID_OFFSET\n" : print "NG_INVALID_OFFSET\n";
51-
$r = mb_stripos($euc_jp, '0', 50, 'EUC-JP');
52-
($r === FALSE) ? print "OK_INVALID_OFFSET\n" : print "NG_INVALID_OFFSET\n";
53-
$r = mb_stripos($euc_jp, 3, 50, 'EUC-JP');
54-
($r === FALSE) ? print "OK_INVALID_OFFSET\n" : print "NG_INVALID_OFFSET\n";
55-
$r = mb_stripos($euc_jp, 0, 50, 'EUC-JP');
56-
($r === FALSE) ? print "OK_INVALID_OFFSET\n" : print "NG_INVALID_OFFSET\n";
57-
$r = mb_stripos($euc_jp, '日本語', -50, 'EUC-JP');
58-
($r === FALSE) ? print "OK_INVALID_OFFSET\n" : print "NG_INVALID_OFFSET\n";
59-
$r = mb_stripos($euc_jp, '0', -50, 'EUC-JP');
60-
($r === FALSE) ? print "OK_INVALID_OFFSET\n" : print "NG_INVALID_OFFSET\n";
61-
$r = mb_stripos($euc_jp, 3, -50, 'EUC-JP');
62-
($r === FALSE) ? print "OK_INVALID_OFFSET\n" : print "NG_INVALID_OFFSET\n";
63-
$r = mb_stripos($euc_jp, 0, -50, 'EUC-JP');
64-
($r === FALSE) ? print "OK_INVALID_OFFSET\n" : print "NG_INVALID_OFFSET\n";
65-
$r = mb_stripos($euc_jp, 0, -44, 'EUC-JP');
66-
($r === FALSE) ? print "OK_INVALID_OFFSET\n" : print "NG_INVALID_OFFSET\n";
67-
6844
// Out of range - should return false
6945
print ("== OUT OF RANGE ==\n");
7046

@@ -143,37 +119,6 @@ String len: 43
143119
33
144120
30
145121
0
146-
== INVALID OFFSET ==
147-
148-
Warning: mb_stripos(): Offset not contained in string in %s on line %d
149-
OK_INVALID_OFFSET
150-
151-
Warning: mb_stripos(): Offset not contained in string in %s on line %d
152-
OK_INVALID_OFFSET
153-
154-
Warning: mb_stripos(): Offset not contained in string in %s on line %d
155-
OK_INVALID_OFFSET
156-
157-
Warning: mb_stripos(): Offset not contained in string in %s on line %d
158-
OK_INVALID_OFFSET
159-
160-
Warning: mb_stripos(): Offset not contained in string in %s on line %d
161-
OK_INVALID_OFFSET
162-
163-
Warning: mb_stripos(): Offset not contained in string in %s on line %d
164-
OK_INVALID_OFFSET
165-
166-
Warning: mb_stripos(): Offset not contained in string in %s on line %d
167-
OK_INVALID_OFFSET
168-
169-
Warning: mb_stripos(): Offset not contained in string in %s on line %d
170-
OK_INVALID_OFFSET
171-
172-
Warning: mb_stripos(): Offset not contained in string in %s on line %d
173-
OK_INVALID_OFFSET
174-
175-
Warning: mb_stripos(): Offset not contained in string in %s on line %d
176-
OK_INVALID_OFFSET
177122
== OUT OF RANGE ==
178123
OK_OUT_RANGE
179124
OK_OUT_RANGE

0 commit comments

Comments
 (0)