Skip to content

Commit 5881e01

Browse files
committed
Convert some warnings to Error
1 parent e4c0403 commit 5881e01

9 files changed

+200
-263
lines changed

ext/mbstring/mbstring.c

Lines changed: 34 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -663,7 +663,7 @@ static void *_php_mb_compile_regex(const char *pattern)
663663
ONIG_ENCODING_ASCII, &OnigSyntaxPerl, &err_info))) {
664664
OnigUChar err_str[ONIG_MAX_ERROR_MESSAGE_LEN];
665665
onig_error_code_to_str(err_str, err_code, err_info);
666-
php_error_docref(NULL, E_WARNING, "%s: %s", pattern, err_str);
666+
zend_throw_error(NULL, "%s: %s", pattern, err_str);
667667
retval = NULL;
668668
}
669669
return retval;
@@ -709,7 +709,7 @@ static void *_php_mb_compile_regex(const char *pattern)
709709
PCRE2_CASELESS, &errnum, &err_offset, php_pcre_cctx()))) {
710710
PCRE2_UCHAR err_str[128];
711711
pcre2_get_error_message(errnum, err_str, sizeof(err_str));
712-
php_error_docref(NULL, E_WARNING, "%s (offset=%zu): %s", pattern, err_offset, err_str);
712+
zend_throw_error(NULL, "%s (offset=%zu): %s", pattern, err_offset, err_str);
713713
}
714714
return retval;
715715
}
@@ -723,7 +723,7 @@ static int _php_mb_match_regex(void *opaque, const char *str, size_t str_len)
723723
pcre2_match_data *match_data = php_pcre_create_match_data(0, opaque);
724724
if (NULL == match_data) {
725725
pcre2_code_free(opaque);
726-
php_error_docref(NULL, E_WARNING, "Cannot allocate match data");
726+
zend_throw_error(NULL, "Cannot allocate match data");
727727
return FAILURE;
728728
}
729729
res = pcre2_match(opaque, (PCRE2_SPTR)str, str_len, 0, 0, match_data, php_pcre_mctx()) >= 0;
@@ -1683,8 +1683,8 @@ PHP_FUNCTION(mb_substitute_character)
16831683
MBSTRG(current_filter_illegal_mode) = MBFL_OUTPUTFILTER_ILLEGAL_MODE_CHAR;
16841684
MBSTRG(current_filter_illegal_substchar) = Z_LVAL_P(arg1);
16851685
} else {
1686-
php_error_docref(NULL, E_WARNING, "Unknown character");
1687-
RETURN_FALSE;
1686+
zend_throw_error(NULL, "Unknown character");
1687+
return;
16881688
}
16891689
}
16901690
break;
@@ -1694,8 +1694,8 @@ PHP_FUNCTION(mb_substitute_character)
16941694
MBSTRG(current_filter_illegal_mode) = MBFL_OUTPUTFILTER_ILLEGAL_MODE_CHAR;
16951695
MBSTRG(current_filter_illegal_substchar) = Z_LVAL_P(arg1);
16961696
} else {
1697-
php_error_docref(NULL, E_WARNING, "Unknown character");
1698-
RETURN_FALSE;
1697+
zend_throw_error(NULL, "Unknown character");
1698+
return;
16991699
}
17001700
break;
17011701
}
@@ -1716,32 +1716,18 @@ PHP_FUNCTION(mb_preferred_mime_name)
17161716
} else {
17171717
no_encoding = mbfl_name2no_encoding(name);
17181718
if (no_encoding == mbfl_no_encoding_invalid) {
1719-
php_error_docref(NULL, E_WARNING, "Unknown encoding \"%s\"", name);
1720-
RETVAL_FALSE;
1719+
zend_value_error("Unknown encoding \"%s\"", name);
1720+
RETURN_THROWS();
17211721
} else {
17221722
const char *preferred_name = mbfl_no2preferred_mime_name(no_encoding);
17231723
if (preferred_name == NULL || *preferred_name == '\0') {
1724-
php_error_docref(NULL, E_WARNING, "No MIME preferred name corresponding to \"%s\"", name);
1725-
RETVAL_FALSE;
1724+
zend_value_error("No MIME preferred name corresponding to \"%s\"", name);
1725+
RETURN_THROWS();
17261726
} else {
17271727
RETVAL_STRING((char *)preferred_name);
17281728
}
17291729
}
17301730
}
1731-
1732-
no_encoding = mbfl_name2no_encoding(name);
1733-
if (no_encoding == mbfl_no_encoding_invalid) {
1734-
zend_value_error("Unknown encoding \"%s\"", name);
1735-
RETURN_THROWS();
1736-
}
1737-
1738-
const char *preferred_name = mbfl_no2preferred_mime_name(no_encoding);
1739-
if (preferred_name == NULL || *preferred_name == '\0') {
1740-
zend_value_error("No MIME preferred name corresponding to \"%s\"", name);
1741-
RETURN_THROWS();
1742-
}
1743-
1744-
RETVAL_STRING((char *)preferred_name);
17451731
}
17461732
/* }}} */
17471733

@@ -2705,7 +2691,7 @@ MBSTRING_API char *php_mb_convert_encoding_ex(const char *input, size_t length,
27052691
/* initialize converter */
27062692
convd = mbfl_buffer_converter_new(from_encoding, to_encoding, string.len);
27072693
if (convd == NULL) {
2708-
php_error_docref(NULL, E_WARNING, "Unable to create character encoding converter");
2694+
zend_throw_error(NULL, "Unable to create character encoding converter");
27092695
return NULL;
27102696
}
27112697

@@ -2766,11 +2752,12 @@ MBSTRING_API char *php_mb_convert_encoding(const char *input, size_t length, con
27662752
string.len = length;
27672753
from_encoding = mbfl_identify_encoding(&string, list, size, MBSTRG(strict_detection));
27682754
if (!from_encoding) {
2769-
php_error_docref(NULL, E_WARNING, "Unable to detect character encoding");
2770-
from_encoding = &mbfl_encoding_pass;
2755+
zend_throw_error(NULL, "Unable to detect character encoding");
2756+
return NULL;
27712757
}
27722758
} else {
2773-
php_error_docref(NULL, E_WARNING, "Illegal character encoding specified");
2759+
zend_throw_error(NULL, "Illegal character encoding specified");
2760+
return NULL;
27742761
}
27752762
if (list != NULL) {
27762763
efree((void *)list);
@@ -2796,7 +2783,7 @@ MBSTRING_API HashTable *php_mb_convert_encoding_recursive(HashTable *input, cons
27962783

27972784
if (GC_IS_RECURSIVE(input)) {
27982785
GC_UNPROTECT_RECURSION(input);
2799-
php_error_docref(NULL, E_WARNING, "Cannot convert recursively referenced values");
2786+
zend_throw_error(NULL, "Cannot convert recursively referenced values");
28002787
return NULL;
28012788
}
28022789
GC_TRY_PROTECT_RECURSION(input);
@@ -3531,14 +3518,14 @@ PHP_FUNCTION(mb_convert_variables)
35313518
if (elist != NULL) {
35323519
efree((void *)elist);
35333520
}
3534-
php_error_docref(NULL, E_WARNING, "Cannot handle recursive references");
3535-
RETURN_FALSE;
3521+
zend_throw_error(NULL, "Cannot handle recursive references");
3522+
return;
35363523
}
35373524
}
35383525

35393526
if (!from_encoding) {
3540-
php_error_docref(NULL, E_WARNING, "Unable to detect encoding");
3541-
from_encoding = &mbfl_encoding_pass;
3527+
zend_throw_error(NULL, "Unable to detect encoding");
3528+
return;
35423529
}
35433530
}
35443531
if (elist != NULL) {
@@ -3549,8 +3536,8 @@ PHP_FUNCTION(mb_convert_variables)
35493536
if (from_encoding != &mbfl_encoding_pass) {
35503537
convd = mbfl_buffer_converter_new(from_encoding, to_encoding, 0);
35513538
if (convd == NULL) {
3552-
php_error_docref(NULL, E_WARNING, "Unable to create converter");
3553-
RETURN_FALSE;
3539+
zend_throw_error(NULL, "Unable to create converter");
3540+
return;
35543541
}
35553542
mbfl_buffer_converter_illegal_mode(convd, MBSTRG(current_filter_illegal_mode));
35563543
mbfl_buffer_converter_illegal_substchar(convd, MBSTRG(current_filter_illegal_substchar));
@@ -3574,8 +3561,8 @@ PHP_FUNCTION(mb_convert_variables)
35743561
mbfl_buffer_converter_delete(convd);
35753562

35763563
if (recursion_error) {
3577-
php_error_docref(NULL, E_WARNING, "Cannot handle recursive references");
3578-
RETURN_FALSE;
3564+
zend_throw_error(NULL, "Cannot handle recursive references");
3565+
return;
35793566
}
35803567
}
35813568

@@ -3929,7 +3916,7 @@ PHP_FUNCTION(mb_send_mail)
39293916
break;
39303917
default:
39313918
zend_type_error("headers parameter must be string or array");
3932-
return;
3919+
RETURN_THROWS();
39333920
}
39343921
}
39353922
if (extra_cmd) {
@@ -3967,8 +3954,8 @@ PHP_FUNCTION(mb_send_mail)
39673954
}
39683955

39693956
if (!_tran_cs) {
3970-
php_error_docref(NULL, E_WARNING, "Unsupported charset \"%s\" - will be regarded as ascii", charset);
3971-
_tran_cs = &mbfl_encoding_ascii;
3957+
zend_throw_error(NULL, "Unsupported charset \"%s\" - will be regarded as ascii", charset);
3958+
RETURN_THROWS();
39723959
}
39733960
tran_cs = _tran_cs;
39743961
}
@@ -3991,9 +3978,8 @@ PHP_FUNCTION(mb_send_mail)
39913978
break;
39923979

39933980
default:
3994-
php_error_docref(NULL, E_WARNING, "Unsupported transfer encoding \"%s\" - will be regarded as 8bit", Z_STRVAL_P(s));
3995-
body_enc = &mbfl_encoding_8bit;
3996-
break;
3981+
zend_throw_error(NULL, "Unsupported transfer encoding \"%s\" - will be regarded as 8bit", Z_STRVAL_P(s));
3982+
RETURN_THROWS();
39973983
}
39983984
suppressed_hdrs.cnt_trans_enc = 1;
39993985
}
@@ -4352,7 +4338,7 @@ MBSTRING_API int php_mb_check_encoding(const char *input, size_t length, const c
43524338

43534339
convd = php_mb_init_convd(encoding);
43544340
if (convd == NULL) {
4355-
php_error_docref(NULL, E_WARNING, "Unable to create converter");
4341+
zend_throw_error(NULL, "Unable to create converter");
43564342
return 0;
43574343
}
43584344

@@ -4386,13 +4372,13 @@ MBSTRING_API int php_mb_check_encoding_recursive(HashTable *vars, const zend_str
43864372

43874373
convd = php_mb_init_convd(encoding);
43884374
if (convd == NULL) {
4389-
php_error_docref(NULL, E_WARNING, "Unable to create converter");
4375+
zend_throw_error(NULL, "Unable to create converter");
43904376
return 0;
43914377
}
43924378

43934379
if (GC_IS_RECURSIVE(vars)) {
43944380
mbfl_buffer_converter_delete(convd);
4395-
php_error_docref(NULL, E_WARNING, "Cannot not handle circular references");
4381+
zend_throw_error(NULL, "Cannot not handle circular references");
43964382
return 0;
43974383
}
43984384
GC_TRY_PROTECT_RECURSION(vars);
@@ -4502,7 +4488,7 @@ static inline zend_long php_mb_ord(const char *str, size_t str_len, zend_string
45024488
enc, &mbfl_encoding_wchar,
45034489
mbfl_wchar_device_output, 0, &dev);
45044490
if (!filter) {
4505-
php_error_docref(NULL, E_WARNING, "Creation of filter failed");
4491+
zend_throw_error(NULL, "Creation of filter failed");
45064492
return -1;
45074493
}
45084494

ext/mbstring/tests/bug66964.phpt

Lines changed: 22 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,18 @@ Bug #66964 (mb_convert_variables() cannot detect recursion)
55
--FILE--
66
<?php
77
$a[] = &$a;
8-
var_dump(mb_convert_variables('utf-8', 'auto', $a));
9-
var_dump(mb_convert_variables('utf-8', 'utf-8', $a));
8+
9+
try {
10+
var_dump(mb_convert_variables('utf-8', 'auto', $a));
11+
} catch (\Error $e) {
12+
echo get_class($e) . ': ' . $e->getMessage() . \PHP_EOL;
13+
}
14+
15+
try {
16+
var_dump(mb_convert_variables('utf-8', 'utf-8', $a));
17+
} catch (\Error $e) {
18+
echo get_class($e) . ': ' . $e->getMessage() . \PHP_EOL;
19+
}
1020

1121
unset($a);
1222
$a[] = '日本語テキスト';
@@ -16,15 +26,17 @@ $a[] = '日本語テキスト';
1626
var_dump(mb_convert_variables('utf-8', 'utf-8', $a), $a);
1727

1828
$a[] = &$a;
19-
var_dump(mb_convert_variables('utf-8', 'utf-8', $a), $a);
2029

21-
?>
22-
--EXPECTF--
23-
Warning: mb_convert_variables(): %s on line %d
24-
bool(false)
30+
try {
31+
var_dump(mb_convert_variables('utf-8', 'utf-8', $a), $a);
32+
} catch (\Error $e) {
33+
echo get_class($e) . ': ' . $e->getMessage() . \PHP_EOL;
34+
}
2535

26-
Warning: mb_convert_variables(): %s on line %d
27-
bool(false)
36+
?>
37+
--EXPECT--
38+
Error: Cannot handle recursive references
39+
Error: Cannot handle recursive references
2840
string(5) "UTF-8"
2941
array(4) {
3042
[0]=>
@@ -36,29 +48,4 @@ array(4) {
3648
[3]=>
3749
string(21) "日本語テキスト"
3850
}
39-
40-
Warning: mb_convert_variables(): %s on line %d
41-
bool(false)
42-
array(5) {
43-
[0]=>
44-
string(21) "日本語テキスト"
45-
[1]=>
46-
string(21) "日本語テキスト"
47-
[2]=>
48-
string(21) "日本語テキスト"
49-
[3]=>
50-
string(21) "日本語テキスト"
51-
[4]=>
52-
&array(5) {
53-
[0]=>
54-
string(21) "日本語テキスト"
55-
[1]=>
56-
string(21) "日本語テキスト"
57-
[2]=>
58-
string(21) "日本語テキスト"
59-
[3]=>
60-
string(21) "日本語テキスト"
61-
[4]=>
62-
*RECURSION*
63-
}
64-
}
51+
Error: Cannot handle recursive references

ext/mbstring/tests/bug69079.phpt

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,27 +9,37 @@ mb_internal_encoding('UTF-8');
99
var_dump(mb_substitute_character(0x1F600));
1010
var_dump(bin2hex(mb_scrub("\xff")));
1111
mb_substitute_character(0x3f); // Reset to '?', as the next call will fail
12-
var_dump(mb_substitute_character(0xD800)); // Surrogate (illegal)
12+
13+
14+
try {
15+
var_dump(mb_substitute_character(0xD800)); // Surrogate (illegal)
16+
} catch (\Error $e) {
17+
echo get_class($e) . ': ' . $e->getMessage() . \PHP_EOL;
18+
}
19+
1320
var_dump(bin2hex(mb_scrub("\xff")));
1421

1522
mb_internal_encoding('EUC-JP-2004');
1623

1724
mb_substitute_character(0x63); // Reset to '?', as the next call will fail
18-
mb_substitute_character(0x8fa1ef); // EUC-JP-2004 encoding of U+50AA (illegal)
25+
26+
try {
27+
mb_substitute_character(0x8fa1ef); // EUC-JP-2004 encoding of U+50AA (illegal)
28+
} catch (\Error $e) {
29+
echo get_class($e) . ': ' . $e->getMessage() . \PHP_EOL;
30+
}
31+
1932
var_dump(bin2hex(mb_scrub("\x8d")));
2033

2134
mb_substitute_character(0x50aa);
2235
var_dump(bin2hex(mb_scrub("\x8d")));
2336

2437
?>
25-
--EXPECTF--
38+
--EXPECT--
2639
bool(true)
2740
string(8) "f09f9880"
28-
29-
Warning: mb_substitute_character(): Unknown character in %s on line %d
30-
bool(false)
41+
Error: Unknown character
3142
string(2) "3f"
32-
33-
Warning: mb_substitute_character(): Unknown character in %s on line %d
43+
Error: Unknown character
3444
string(2) "63"
3545
string(6) "8fa1ef"

ext/mbstring/tests/mb_check_encoding_array.phpt

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,12 @@ $str = "Japanese UTF-8 text. 日本語のUTF-8テキスト";
1010
$arr = [1234, 12.34, TRUE, FALSE, NULL, $str, 'key'=>$str, $str=>'val'];
1111
$tmp = &$arr;
1212
$arr[] = $tmp;
13-
var_dump(mb_check_encoding($str), mb_check_encoding($arr));
13+
14+
try {
15+
var_dump(mb_check_encoding($str), mb_check_encoding($arr));
16+
} catch (\Error $e) {
17+
echo get_class($e) . ': ' . $e->getMessage() . \PHP_EOL;
18+
}
1419

1520
// Invalid - Return false due to short circuit check
1621
$str = "Japanese UTF-8 text. 日本語\xFE\x01\x02のUTF-8テキスト";
@@ -22,10 +27,8 @@ $tmp = &$arr2;
2227
$arr2[] = $tmp;
2328
var_dump(mb_check_encoding($str), mb_check_encoding($arr1), mb_check_encoding($arr2));
2429
?>
25-
--EXPECTF--
26-
Warning: mb_check_encoding(): Cannot not handle circular references in %s on line %d
27-
bool(true)
28-
bool(false)
30+
--EXPECT--
31+
Error: Cannot not handle circular references
2932
bool(false)
3033
bool(false)
3134
bool(false)

0 commit comments

Comments
 (0)