Skip to content

Commit 0039293

Browse files
committed
Convert some warnings to Error
1 parent 80f9e8e commit 0039293

8 files changed

+195
-234
lines changed

ext/mbstring/mbstring.c

Lines changed: 29 additions & 29 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
}
@@ -2744,7 +2744,7 @@ MBSTRING_API char *php_mb_convert_encoding_ex(const char *input, size_t length,
27442744
/* initialize converter */
27452745
convd = mbfl_buffer_converter_new(from_encoding, to_encoding, string.len);
27462746
if (convd == NULL) {
2747-
php_error_docref(NULL, E_WARNING, "Unable to create character encoding converter");
2747+
zend_throw_error(NULL, "Unable to create character encoding converter");
27482748
return NULL;
27492749
}
27502750

@@ -2805,11 +2805,12 @@ MBSTRING_API char *php_mb_convert_encoding(const char *input, size_t length, con
28052805
string.len = length;
28062806
from_encoding = mbfl_identify_encoding(&string, list, size, MBSTRG(strict_detection));
28072807
if (!from_encoding) {
2808-
php_error_docref(NULL, E_WARNING, "Unable to detect character encoding");
2809-
from_encoding = &mbfl_encoding_pass;
2808+
zend_throw_error(NULL, "Unable to detect character encoding");
2809+
return NULL;
28102810
}
28112811
} else {
2812-
php_error_docref(NULL, E_WARNING, "Illegal character encoding specified");
2812+
zend_throw_error(NULL, "Illegal character encoding specified");
2813+
return NULL;
28132814
}
28142815
if (list != NULL) {
28152816
efree((void *)list);
@@ -2835,7 +2836,7 @@ MBSTRING_API HashTable *php_mb_convert_encoding_recursive(HashTable *input, cons
28352836

28362837
if (GC_IS_RECURSIVE(input)) {
28372838
GC_UNPROTECT_RECURSION(input);
2838-
php_error_docref(NULL, E_WARNING, "Cannot convert recursively referenced values");
2839+
zend_throw_error(NULL, "Cannot convert recursively referenced values");
28392840
return NULL;
28402841
}
28412842
GC_TRY_PROTECT_RECURSION(input);
@@ -3570,14 +3571,14 @@ PHP_FUNCTION(mb_convert_variables)
35703571
if (elist != NULL) {
35713572
efree((void *)elist);
35723573
}
3573-
php_error_docref(NULL, E_WARNING, "Cannot handle recursive references");
3574-
RETURN_FALSE;
3574+
zend_throw_error(NULL, "Cannot handle recursive references");
3575+
return;
35753576
}
35763577
}
35773578

35783579
if (!from_encoding) {
3579-
php_error_docref(NULL, E_WARNING, "Unable to detect encoding");
3580-
from_encoding = &mbfl_encoding_pass;
3580+
zend_throw_error(NULL, "Unable to detect encoding");
3581+
return;
35813582
}
35823583
}
35833584
if (elist != NULL) {
@@ -3588,8 +3589,8 @@ PHP_FUNCTION(mb_convert_variables)
35883589
if (from_encoding != &mbfl_encoding_pass) {
35893590
convd = mbfl_buffer_converter_new(from_encoding, to_encoding, 0);
35903591
if (convd == NULL) {
3591-
php_error_docref(NULL, E_WARNING, "Unable to create converter");
3592-
RETURN_FALSE;
3592+
zend_throw_error(NULL, "Unable to create converter");
3593+
return;
35933594
}
35943595
mbfl_buffer_converter_illegal_mode(convd, MBSTRG(current_filter_illegal_mode));
35953596
mbfl_buffer_converter_illegal_substchar(convd, MBSTRG(current_filter_illegal_substchar));
@@ -3613,8 +3614,8 @@ PHP_FUNCTION(mb_convert_variables)
36133614
mbfl_buffer_converter_delete(convd);
36143615

36153616
if (recursion_error) {
3616-
php_error_docref(NULL, E_WARNING, "Cannot handle recursive references");
3617-
RETURN_FALSE;
3617+
zend_throw_error(NULL, "Cannot handle recursive references");
3618+
return;
36183619
}
36193620
}
36203621

@@ -4006,8 +4007,8 @@ PHP_FUNCTION(mb_send_mail)
40064007
}
40074008

40084009
if (!_tran_cs) {
4009-
php_error_docref(NULL, E_WARNING, "Unsupported charset \"%s\" - will be regarded as ascii", charset);
4010-
_tran_cs = &mbfl_encoding_ascii;
4010+
zend_throw_error(NULL, "Unsupported charset \"%s\" - will be regarded as ascii", charset);
4011+
return;
40114012
}
40124013
tran_cs = _tran_cs;
40134014
}
@@ -4030,9 +4031,8 @@ PHP_FUNCTION(mb_send_mail)
40304031
break;
40314032

40324033
default:
4033-
php_error_docref(NULL, E_WARNING, "Unsupported transfer encoding \"%s\" - will be regarded as 8bit", Z_STRVAL_P(s));
4034-
body_enc = &mbfl_encoding_8bit;
4035-
break;
4034+
zend_throw_error(NULL, "Unsupported transfer encoding \"%s\" - will be regarded as 8bit", Z_STRVAL_P(s));
4035+
return;
40364036
}
40374037
suppressed_hdrs.cnt_trans_enc = 1;
40384038
}
@@ -4391,7 +4391,7 @@ MBSTRING_API int php_mb_check_encoding(const char *input, size_t length, const c
43914391

43924392
convd = php_mb_init_convd(encoding);
43934393
if (convd == NULL) {
4394-
php_error_docref(NULL, E_WARNING, "Unable to create converter");
4394+
zend_throw_error(NULL, "Unable to create converter");
43954395
return 0;
43964396
}
43974397

@@ -4425,13 +4425,13 @@ MBSTRING_API int php_mb_check_encoding_recursive(HashTable *vars, const zend_str
44254425

44264426
convd = php_mb_init_convd(encoding);
44274427
if (convd == NULL) {
4428-
php_error_docref(NULL, E_WARNING, "Unable to create converter");
4428+
zend_throw_error(NULL, "Unable to create converter");
44294429
return 0;
44304430
}
44314431

44324432
if (GC_IS_RECURSIVE(vars)) {
44334433
mbfl_buffer_converter_delete(convd);
4434-
php_error_docref(NULL, E_WARNING, "Cannot not handle circular references");
4434+
zend_throw_error(NULL, "Cannot not handle circular references");
44354435
return 0;
44364436
}
44374437
GC_TRY_PROTECT_RECURSION(vars);
@@ -4541,7 +4541,7 @@ static inline zend_long php_mb_ord(const char *str, size_t str_len, zend_string
45414541
enc, &mbfl_encoding_wchar,
45424542
mbfl_wchar_device_output, 0, &dev);
45434543
if (!filter) {
4544-
php_error_docref(NULL, E_WARNING, "Creation of filter failed");
4544+
zend_throw_error(NULL, "Creation of filter failed");
45454545
return -1;
45464546
}
45474547

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)