Skip to content

Commit c801e7c

Browse files
committed
Convert some unknown encoding warnings to ValueErrors in ext/mbstring
Promotes only the warnings where the encoding comes only from a string. Functions which accept an array of encodings will be fixed at a later stage. Closes GH-
1 parent 36935e4 commit c801e7c

30 files changed

+550
-403
lines changed

ext/mbstring/mbstring.c

Lines changed: 69 additions & 65 deletions
Large diffs are not rendered by default.

ext/mbstring/php_mbregex.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -855,8 +855,8 @@ PHP_FUNCTION(mb_regex_encoding)
855855
mbctype = _php_mb_regex_name2mbctype(encoding);
856856

857857
if (mbctype == ONIG_ENCODING_UNDEF) {
858-
php_error_docref(NULL, E_WARNING, "Unknown encoding \"%s\"", encoding);
859-
RETURN_FALSE;
858+
zend_argument_value_error(1, "must be a valid encoding, \"%s\" given", encoding);
859+
RETURN_THROWS();
860860
}
861861

862862
MBREX(current_mbctype) = mbctype;

ext/mbstring/tests/bug43998.phpt

Lines changed: 24 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -22,49 +22,38 @@ $sourcestring = 'Hello, World';
2222
$inputs = array(12345, 12.3456789000E-10, true, false, "");
2323
$iterator = 1;
2424
foreach($inputs as $input) {
25-
echo "\n-- Iteration $iterator --\n";
26-
var_dump( mb_strtolower($sourcestring, $input) );
27-
var_dump( mb_strtoupper($sourcestring, $input) );
25+
echo "\n-- Iteration $iterator --\n";
26+
try {
27+
var_dump( mb_strtolower($sourcestring, $input) );
28+
} catch (\ValueError $e) {
29+
echo $e->getMessage() . \PHP_EOL;
30+
}
31+
try {
32+
var_dump( mb_strtoupper($sourcestring, $input) );
33+
} catch (\ValueError $e) {
34+
echo $e->getMessage() . \PHP_EOL;
35+
}
2836
$iterator++;
29-
};
37+
}
38+
3039
?>
31-
--EXPECTF--
40+
--EXPECT--
3241
-- Iteration 1 --
33-
34-
Warning: mb_strtolower(): Unknown encoding "12345" in %s on line %d
35-
bool(false)
36-
37-
Warning: mb_strtoupper(): Unknown encoding "12345" in %s on line %d
38-
bool(false)
42+
mb_strtolower(): Argument #2 ($encoding) must be a valid encoding, "12345" given
43+
mb_strtoupper(): Argument #2 ($encoding) must be a valid encoding, "12345" given
3944

4045
-- Iteration 2 --
41-
42-
Warning: mb_strtolower(): Unknown encoding "1.23456789E-9" in %s on line %d
43-
bool(false)
44-
45-
Warning: mb_strtoupper(): Unknown encoding "1.23456789E-9" in %s on line %d
46-
bool(false)
46+
mb_strtolower(): Argument #2 ($encoding) must be a valid encoding, "1.23456789E-9" given
47+
mb_strtoupper(): Argument #2 ($encoding) must be a valid encoding, "1.23456789E-9" given
4748

4849
-- Iteration 3 --
49-
50-
Warning: mb_strtolower(): Unknown encoding "1" in %s on line %d
51-
bool(false)
52-
53-
Warning: mb_strtoupper(): Unknown encoding "1" in %s on line %d
54-
bool(false)
50+
mb_strtolower(): Argument #2 ($encoding) must be a valid encoding, "1" given
51+
mb_strtoupper(): Argument #2 ($encoding) must be a valid encoding, "1" given
5552

5653
-- Iteration 4 --
57-
58-
Warning: mb_strtolower(): Unknown encoding "" in %s on line %d
59-
bool(false)
60-
61-
Warning: mb_strtoupper(): Unknown encoding "" in %s on line %d
62-
bool(false)
54+
mb_strtolower(): Argument #2 ($encoding) must be a valid encoding, "" given
55+
mb_strtoupper(): Argument #2 ($encoding) must be a valid encoding, "" given
6356

6457
-- Iteration 5 --
65-
66-
Warning: mb_strtolower(): Unknown encoding "" in %s on line %d
67-
bool(false)
68-
69-
Warning: mb_strtoupper(): Unknown encoding "" in %s on line %d
70-
bool(false)
58+
mb_strtolower(): Argument #2 ($encoding) must be a valid encoding, "" given
59+
mb_strtoupper(): Argument #2 ($encoding) must be a valid encoding, "" given

ext/mbstring/tests/bug79149.phpt

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,22 @@ if (!extension_loaded('mbstring')) die('skip mbstring extension not available');
66
?>
77
--FILE--
88
<?php
9-
var_dump(mb_convert_encoding("", "UTF-8", [0]));
10-
var_dump(mb_convert_encoding('foo', 'UTF-8', array(['bar'], ['baz'])));
11-
var_dump(mb_convert_encoding('foo', 'UTF-8', array("foo\0bar")));
9+
try {
10+
var_dump(mb_convert_encoding("", "UTF-8", [0]));
11+
} catch (\ValueError $e) {
12+
echo $e->getMessage() . \PHP_EOL;
13+
}
14+
try {
15+
var_dump(mb_convert_encoding('foo', 'UTF-8', array(['bar'], ['baz'])));
16+
} catch (\ValueError $e) {
17+
echo $e->getMessage() . \PHP_EOL;
18+
}
19+
try {
20+
var_dump(mb_convert_encoding('foo', 'UTF-8', array("foo\0bar")));
21+
} catch (\ValueError $e) {
22+
echo $e->getMessage() . \PHP_EOL;
23+
}
24+
1225
?>
1326
--EXPECTF--
1427
Warning: mb_convert_encoding(): Unknown encoding "0" in %s on line %d

ext/mbstring/tests/mb_chr.phpt

Lines changed: 30 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -12,31 +12,48 @@ var_dump(
1212
);
1313

1414
// Invalid
15-
var_dump(
16-
mb_chr(0xd800, "typo"),
17-
mb_chr(0xd800, "pass"),
18-
mb_chr(0xd800, "jis"),
19-
mb_chr(0xd800, "cp50222"),
20-
mb_chr(0xd800, "utf-7")
21-
);
15+
try {
16+
var_dump( mb_chr(0xd800, "typo") );
17+
} catch (\ValueError $e) {
18+
echo $e->getMessage() . \PHP_EOL;
19+
}
20+
try {
21+
var_dump( mb_chr(0xd800, "pass") );
22+
} catch (\ValueError $e) {
23+
echo $e->getMessage() . \PHP_EOL;
24+
}
25+
try {
26+
var_dump( mb_chr(0xd800, "jis") );
27+
} catch (\ValueError $e) {
28+
echo $e->getMessage() . \PHP_EOL;
29+
}
30+
try {
31+
var_dump( mb_chr(0xd800, "cp50222") );
32+
} catch (\ValueError $e) {
33+
echo $e->getMessage() . \PHP_EOL;
34+
}
35+
try {
36+
var_dump( mb_chr(0xd800, "utf-7") );
37+
} catch (\ValueError $e) {
38+
echo $e->getMessage() . \PHP_EOL;
39+
}
40+
2241
?>
2342
--EXPECTF--
2443
bool(true)
2544
bool(true)
2645
bool(true)
2746
bool(true)
28-
29-
Warning: mb_chr(): Unknown encoding "typo" in %s on line %d
47+
mb_chr(): Argument #2 ($encoding) must be a valid encoding, "typo" given
3048

3149
Warning: mb_chr(): Unsupported encoding "pass" in %s on line %d
50+
bool(false)
3251

3352
Warning: mb_chr(): Unsupported encoding "jis" in %s on line %d
53+
bool(false)
3454

3555
Warning: mb_chr(): Unsupported encoding "cp50222" in %s on line %d
56+
bool(false)
3657

3758
Warning: mb_chr(): Unsupported encoding "utf-7" in %s on line %d
3859
bool(false)
39-
bool(false)
40-
bool(false)
41-
bool(false)
42-
bool(false)

ext/mbstring/tests/mb_convert_encoding.phpt

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -96,11 +96,14 @@ $s = mb_convert_encoding('', 'EUC-JP');
9696
print("EUC-JP: $s\n"); // SJIS
9797

9898
$s = $euc_jp;
99-
$s = mb_convert_encoding($s, 'BAD');
100-
print("BAD: $s\n"); // BAD
99+
try {
100+
var_dump( mb_convert_encoding($s, 'BAD') );
101+
} catch (\ValueError $e) {
102+
echo $e->getMessage() . \PHP_EOL;
103+
}
101104

102105
?>
103-
--EXPECTF--
106+
--EXPECT--
104107
== BASIC TEST ==
105108
EUC-JP: 日本語テキストです。0123456789。
106109
EUC-JP: 日本語テキストです。0123456789。
@@ -121,6 +124,4 @@ JIS: GyRCRnxLXDhsJUYlLSU5JUgkRyQ5ISMbKEIwMTIzNBskQiM1IzYjNyM4IzkhIxsoQg==
121124
== INVALID PARAMETER ==
122125
INT: 1234
123126
EUC-JP:
124-
125-
Warning: mb_convert_encoding(): Unknown encoding "BAD" in %s on line %d
126-
BAD:
127+
mb_convert_encoding(): Argument #2 ($to) must be a valid encoding, "BAD" given

ext/mbstring/tests/mb_encoding_aliases.phpt

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,14 @@ sort($list);
99
var_dump($list);
1010
var_dump(mb_encoding_aliases("7bit"));
1111
var_dump(mb_encoding_aliases("8bit"));
12-
var_dump(mb_encoding_aliases("BAD"));
12+
13+
try {
14+
var_dump(mb_encoding_aliases("BAD"));
15+
} catch (\ValueError $e) {
16+
echo $e->getMessage() . \PHP_EOL;
17+
}
1318
?>
14-
--EXPECTF--
19+
--EXPECT--
1520
array(11) {
1621
[0]=>
1722
string(14) "ANSI_X3.4-1968"
@@ -42,6 +47,4 @@ array(1) {
4247
[0]=>
4348
string(6) "binary"
4449
}
45-
46-
Warning: mb_encoding_aliases(): Unknown encoding "BAD" in %s on line %d
47-
bool(false)
50+
mb_encoding_aliases(): Argument #1 ($encoding) must be a valid encoding, "BAD" given

ext/mbstring/tests/mb_http_output.phpt

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -41,14 +41,18 @@ print "$enc\n";
4141
// Invalid parameters
4242
print "== INVALID PARAMETER ==\n";
4343

44-
// Note: Bad string raise Warning. Bad Type raise Notice (Type Conversion) and Warning....
45-
$r = mb_http_output('BAD_NAME');
46-
($r === FALSE) ? print "OK_BAD_SET\n" : print "NG_BAD_SET\n";
44+
// Note: Bad string raise ValueError. Bad Type raise Notice (Type Conversion) and ValueError
45+
try {
46+
$r = mb_http_output('BAD_NAME');
47+
print 'NG_BAD_SET' . \PHP_EOL;
48+
} catch (\ValueError $e) {
49+
echo $e->getMessage() . \PHP_EOL;
50+
}
4751
$enc = mb_http_output();
4852
print "$enc\n";
4953

5054
?>
51-
--EXPECTF--
55+
--EXPECT--
5256
OK_ASCII_SET
5357
ASCII
5458
OK_SJIS_SET
@@ -60,7 +64,5 @@ UTF-8
6064
OK_EUC-JP_SET
6165
EUC-JP
6266
== INVALID PARAMETER ==
63-
64-
Warning: mb_http_output(): Unknown encoding "BAD_NAME" in %s on line %d
65-
OK_BAD_SET
67+
mb_http_output(): Argument #1 ($encoding) must be a valid encoding, "BAD_NAME" given
6668
EUC-JP

ext/mbstring/tests/mb_internal_encoding.phpt

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,21 +30,24 @@ print "$enc\n";
3030
print "== INVALID PARAMETER ==\n";
3131

3232
// Note: Other than string type, PHP raises Warning
33-
$r = mb_internal_encoding('BAD');
34-
($r === false) ? print "OK_BAD_SET\n" : print "NG_BAD_SET\n";
33+
try {
34+
$r = mb_internal_encoding('BAD_NAME');
35+
print 'NG_BAD_SET' . \PHP_EOL;
36+
} catch (\ValueError $e) {
37+
echo $e->getMessage() . \PHP_EOL;
38+
}
39+
3540
$enc = mb_internal_encoding();
3641
print "$enc\n";
3742

3843
?>
39-
--EXPECTF--
44+
--EXPECT--
4045
OK_EUC-JP_SET
4146
EUC-JP
4247
OK_UTF-8_SET
4348
UTF-8
4449
OK_ASCII_SET
4550
ASCII
4651
== INVALID PARAMETER ==
47-
48-
Warning: mb_internal_encoding(): Unknown encoding "BAD" in %s on line %d
49-
OK_BAD_SET
52+
mb_internal_encoding(): Argument #1 ($encoding) must be a valid encoding, "BAD_NAME" given
5053
ASCII

ext/mbstring/tests/mb_internal_encoding_error2.phpt

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,13 @@ function_exists('mb_internal_encoding') or die("skip mb_internal_encoding() is n
1919

2020
echo "*** Testing mb_internal_encoding() : error conditions ***\n";
2121

22-
var_dump(mb_internal_encoding('unknown-encoding'));
22+
try {
23+
var_dump(mb_internal_encoding('unknown-encoding'));
24+
} catch (\ValueError $e) {
25+
echo $e->getMessage() . \PHP_EOL;
26+
}
2327

24-
echo "Done";
2528
?>
26-
--EXPECTF--
29+
--EXPECT--
2730
*** Testing mb_internal_encoding() : error conditions ***
28-
29-
Warning: mb_internal_encoding(): Unknown encoding "unknown-encoding" in %s on line %d
30-
bool(false)
31-
Done
31+
mb_internal_encoding(): Argument #1 ($encoding) must be a valid encoding, "unknown-encoding" given
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
--TEST--
2+
Test INI mbstring.internal_encoding basic - invalid encoding specified in INI
3+
--SKIPIF--
4+
<?php
5+
extension_loaded('mbstring') or die('skip');
6+
function_exists('mb_stripos') or die("skip mb_stripos() is not available in this build");
7+
?>
8+
--INI--
9+
mbstring.internal_encoding=BAD
10+
--FILE--
11+
<?php
12+
13+
echo "*** Testing INI mbstring.internal_encoding: invalid encoding specified in INI ***\n";
14+
15+
echo mb_internal_encoding()."\n";
16+
echo ini_get('mbstring.internal_encoding')."\n";
17+
mb_internal_encoding('UTF-8');
18+
echo mb_internal_encoding()."\n";
19+
echo ini_get('mbstring.internal_encoding')."\n";
20+
21+
?>
22+
--EXPECT--
23+
PHP Deprecated: PHP Startup: Use of mbstring.internal_encoding is deprecated in Unknown on line 0
24+
25+
Deprecated: PHP Startup: Use of mbstring.internal_encoding is deprecated in Unknown on line 0
26+
*** Testing INI mbstring.internal_encoding: invalid encoding specified in INI ***
27+
UTF-8
28+
BAD
29+
UTF-8
30+
BAD

0 commit comments

Comments
 (0)