Skip to content

Commit 8f3f412

Browse files
committed
Convert some warnings to Error
1 parent 437d857 commit 8f3f412

8 files changed

+200
-253
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

@@ -2689,7 +2675,7 @@ MBSTRING_API char *php_mb_convert_encoding_ex(const char *input, size_t length,
26892675
/* initialize converter */
26902676
convd = mbfl_buffer_converter_new(from_encoding, to_encoding, string.len);
26912677
if (convd == NULL) {
2692-
php_error_docref(NULL, E_WARNING, "Unable to create character encoding converter");
2678+
zend_throw_error(NULL, "Unable to create character encoding converter");
26932679
return NULL;
26942680
}
26952681

@@ -2750,11 +2736,12 @@ MBSTRING_API char *php_mb_convert_encoding(const char *input, size_t length, con
27502736
string.len = length;
27512737
from_encoding = mbfl_identify_encoding(&string, list, size, MBSTRG(strict_detection));
27522738
if (!from_encoding) {
2753-
php_error_docref(NULL, E_WARNING, "Unable to detect character encoding");
2754-
from_encoding = &mbfl_encoding_pass;
2739+
zend_throw_error(NULL, "Unable to detect character encoding");
2740+
return NULL;
27552741
}
27562742
} else {
2757-
php_error_docref(NULL, E_WARNING, "Illegal character encoding specified");
2743+
zend_throw_error(NULL, "Illegal character encoding specified");
2744+
return NULL;
27582745
}
27592746
if (list != NULL) {
27602747
efree((void *)list);
@@ -2780,7 +2767,7 @@ MBSTRING_API HashTable *php_mb_convert_encoding_recursive(HashTable *input, cons
27802767

27812768
if (GC_IS_RECURSIVE(input)) {
27822769
GC_UNPROTECT_RECURSION(input);
2783-
php_error_docref(NULL, E_WARNING, "Cannot convert recursively referenced values");
2770+
zend_throw_error(NULL, "Cannot convert recursively referenced values");
27842771
return NULL;
27852772
}
27862773
GC_TRY_PROTECT_RECURSION(input);
@@ -3515,14 +3502,14 @@ PHP_FUNCTION(mb_convert_variables)
35153502
if (elist != NULL) {
35163503
efree((void *)elist);
35173504
}
3518-
php_error_docref(NULL, E_WARNING, "Cannot handle recursive references");
3519-
RETURN_FALSE;
3505+
zend_throw_error(NULL, "Cannot handle recursive references");
3506+
return;
35203507
}
35213508
}
35223509

35233510
if (!from_encoding) {
3524-
php_error_docref(NULL, E_WARNING, "Unable to detect encoding");
3525-
from_encoding = &mbfl_encoding_pass;
3511+
zend_throw_error(NULL, "Unable to detect encoding");
3512+
return;
35263513
}
35273514
}
35283515
if (elist != NULL) {
@@ -3533,8 +3520,8 @@ PHP_FUNCTION(mb_convert_variables)
35333520
if (from_encoding != &mbfl_encoding_pass) {
35343521
convd = mbfl_buffer_converter_new(from_encoding, to_encoding, 0);
35353522
if (convd == NULL) {
3536-
php_error_docref(NULL, E_WARNING, "Unable to create converter");
3537-
RETURN_FALSE;
3523+
zend_throw_error(NULL, "Unable to create converter");
3524+
return;
35383525
}
35393526
mbfl_buffer_converter_illegal_mode(convd, MBSTRG(current_filter_illegal_mode));
35403527
mbfl_buffer_converter_illegal_substchar(convd, MBSTRG(current_filter_illegal_substchar));
@@ -3558,8 +3545,8 @@ PHP_FUNCTION(mb_convert_variables)
35583545
mbfl_buffer_converter_delete(convd);
35593546

35603547
if (recursion_error) {
3561-
php_error_docref(NULL, E_WARNING, "Cannot handle recursive references");
3562-
RETURN_FALSE;
3548+
zend_throw_error(NULL, "Cannot handle recursive references");
3549+
return;
35633550
}
35643551
}
35653552

@@ -3913,7 +3900,7 @@ PHP_FUNCTION(mb_send_mail)
39133900
break;
39143901
default:
39153902
zend_type_error("headers parameter must be string or array");
3916-
return;
3903+
RETURN_THROWS();
39173904
}
39183905
}
39193906
if (extra_cmd) {
@@ -3951,8 +3938,8 @@ PHP_FUNCTION(mb_send_mail)
39513938
}
39523939

39533940
if (!_tran_cs) {
3954-
php_error_docref(NULL, E_WARNING, "Unsupported charset \"%s\" - will be regarded as ascii", charset);
3955-
_tran_cs = &mbfl_encoding_ascii;
3941+
zend_throw_error(NULL, "Unsupported charset \"%s\" - will be regarded as ascii", charset);
3942+
RETURN_THROWS();
39563943
}
39573944
tran_cs = _tran_cs;
39583945
}
@@ -3975,9 +3962,8 @@ PHP_FUNCTION(mb_send_mail)
39753962
break;
39763963

39773964
default:
3978-
php_error_docref(NULL, E_WARNING, "Unsupported transfer encoding \"%s\" - will be regarded as 8bit", Z_STRVAL_P(s));
3979-
body_enc = &mbfl_encoding_8bit;
3980-
break;
3965+
zend_throw_error(NULL, "Unsupported transfer encoding \"%s\" - will be regarded as 8bit", Z_STRVAL_P(s));
3966+
RETURN_THROWS();
39813967
}
39823968
suppressed_hdrs.cnt_trans_enc = 1;
39833969
}
@@ -4336,7 +4322,7 @@ MBSTRING_API int php_mb_check_encoding(const char *input, size_t length, const c
43364322

43374323
convd = php_mb_init_convd(encoding);
43384324
if (convd == NULL) {
4339-
php_error_docref(NULL, E_WARNING, "Unable to create converter");
4325+
zend_throw_error(NULL, "Unable to create converter");
43404326
return 0;
43414327
}
43424328

@@ -4370,13 +4356,13 @@ MBSTRING_API int php_mb_check_encoding_recursive(HashTable *vars, const zend_str
43704356

43714357
convd = php_mb_init_convd(encoding);
43724358
if (convd == NULL) {
4373-
php_error_docref(NULL, E_WARNING, "Unable to create converter");
4359+
zend_throw_error(NULL, "Unable to create converter");
43744360
return 0;
43754361
}
43764362

43774363
if (GC_IS_RECURSIVE(vars)) {
43784364
mbfl_buffer_converter_delete(convd);
4379-
php_error_docref(NULL, E_WARNING, "Cannot not handle circular references");
4365+
zend_throw_error(NULL, "Cannot not handle circular references");
43804366
return 0;
43814367
}
43824368
GC_TRY_PROTECT_RECURSION(vars);
@@ -4486,7 +4472,7 @@ static inline zend_long php_mb_ord(const char *str, size_t str_len, zend_string
44864472
enc, &mbfl_encoding_wchar,
44874473
mbfl_wchar_device_output, 0, &dev);
44884474
if (!filter) {
4489-
php_error_docref(NULL, E_WARNING, "Creation of filter failed");
4475+
zend_throw_error(NULL, "Creation of filter failed");
44904476
return -1;
44914477
}
44924478

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)