Skip to content

Commit 6da8b93

Browse files
committed
ext/mbstring: Refactor mb_get_info()
1 parent a6775c3 commit 6da8b93

File tree

2 files changed

+77
-50
lines changed

2 files changed

+77
-50
lines changed

ext/mbstring/mbstring.c

Lines changed: 55 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -4647,8 +4647,10 @@ PHP_FUNCTION(mb_get_info)
46474647
size_t n;
46484648
char *name;
46494649
zval row;
4650-
const mbfl_language *lang = mbfl_no2language(MBSTRG(language));
46514650
const mbfl_encoding **entry;
4651+
const mbfl_language *lang = mbfl_no2language(MBSTRG(language));
4652+
4653+
ZEND_ASSERT(lang);
46524654

46534655
ZEND_PARSE_PARAMETERS_START(0, 1)
46544656
Z_PARAM_OPTIONAL
@@ -4666,29 +4668,32 @@ PHP_FUNCTION(mb_get_info)
46664668
if (MBSTRG(current_http_output_encoding)) {
46674669
add_assoc_string(return_value, "http_output", (char *)MBSTRG(current_http_output_encoding)->name);
46684670
}
4669-
if ((name = (char *)zend_ini_string("mbstring.http_output_conv_mimetypes", sizeof("mbstring.http_output_conv_mimetypes") - 1, 0)) != NULL) {
4670-
add_assoc_string(return_value, "http_output_conv_mimetypes", name);
4671-
}
4672-
if (lang != NULL) {
4673-
if ((name = (char *)mbfl_no_encoding2name(lang->mail_charset)) != NULL) {
4674-
add_assoc_string(return_value, "mail_charset", name);
4675-
}
4676-
if ((name = (char *)mbfl_no_encoding2name(lang->mail_header_encoding)) != NULL) {
4677-
add_assoc_string(return_value, "mail_header_encoding", name);
4678-
}
4679-
if ((name = (char *)mbfl_no_encoding2name(lang->mail_body_encoding)) != NULL) {
4680-
add_assoc_string(return_value, "mail_body_encoding", name);
4681-
}
4682-
}
4671+
4672+
add_assoc_str(return_value, "http_output_conv_mimetypes",
4673+
zend_ini_str("mbstring.http_output_conv_mimetypes", sizeof("mbstring.http_output_conv_mimetypes") - 1, 0)
4674+
);
4675+
4676+
name = (char *)mbfl_no_encoding2name(lang->mail_charset);
4677+
add_assoc_string(return_value, "mail_charset", name);
4678+
4679+
name = (char *)mbfl_no_encoding2name(lang->mail_header_encoding);
4680+
add_assoc_string(return_value, "mail_header_encoding", name);
4681+
4682+
name = (char *)mbfl_no_encoding2name(lang->mail_body_encoding);
4683+
add_assoc_string(return_value, "mail_body_encoding", name);
4684+
46834685
add_assoc_long(return_value, "illegal_chars", MBSTRG(illegalchars));
4686+
46844687
if (MBSTRG(encoding_translation)) {
46854688
add_assoc_string(return_value, "encoding_translation", "On");
46864689
} else {
46874690
add_assoc_string(return_value, "encoding_translation", "Off");
46884691
}
4689-
if ((name = (char *)mbfl_no_language2name(MBSTRG(language))) != NULL) {
4690-
add_assoc_string(return_value, "language", name);
4691-
}
4692+
4693+
name = (char *)mbfl_no_language2name(MBSTRG(language));
4694+
add_assoc_string(return_value, "language", name);
4695+
4696+
// TODO Seems to always have one entry at least?
46924697
n = MBSTRG(current_detect_order_list_size);
46934698
entry = MBSTRG(current_detect_order_list);
46944699
if (n > 0) {
@@ -4715,46 +4720,46 @@ PHP_FUNCTION(mb_get_info)
47154720
add_assoc_string(return_value, "strict_detection", "Off");
47164721
}
47174722
} else if (zend_string_equals_literal_ci(type, "internal_encoding")) {
4718-
if (MBSTRG(current_internal_encoding)) {
4719-
RETVAL_STRING((char *)MBSTRG(current_internal_encoding)->name);
4720-
}
4723+
ZEND_ASSERT(MBSTRG(current_internal_encoding));
4724+
RETURN_STRING((char *)MBSTRG(current_internal_encoding)->name);
47214725
} else if (zend_string_equals_literal_ci(type, "http_input")) {
47224726
if (MBSTRG(http_input_identify)) {
4723-
RETVAL_STRING((char *)MBSTRG(http_input_identify)->name);
4727+
RETURN_STRING((char *)MBSTRG(http_input_identify)->name);
47244728
}
4729+
RETURN_NULL();
47254730
} else if (zend_string_equals_literal_ci(type, "http_output")) {
4726-
if (MBSTRG(current_http_output_encoding)) {
4727-
RETVAL_STRING((char *)MBSTRG(current_http_output_encoding)->name);
4728-
}
4731+
ZEND_ASSERT(MBSTRG(current_http_output_encoding));
4732+
RETURN_STRING((char *)MBSTRG(current_http_output_encoding)->name);
47294733
} else if (zend_string_equals_literal_ci(type, "http_output_conv_mimetypes")) {
4730-
if ((name = (char *)zend_ini_string("mbstring.http_output_conv_mimetypes", sizeof("mbstring.http_output_conv_mimetypes") - 1, 0)) != NULL) {
4731-
RETVAL_STRING(name);
4732-
}
4734+
RETURN_STR(
4735+
zend_ini_str(
4736+
"mbstring.http_output_conv_mimetypes",
4737+
sizeof("mbstring.http_output_conv_mimetypes") - 1,
4738+
false
4739+
)
4740+
);
47334741
} else if (zend_string_equals_literal_ci(type, "mail_charset")) {
4734-
if (lang != NULL && (name = (char *)mbfl_no_encoding2name(lang->mail_charset)) != NULL) {
4735-
RETVAL_STRING(name);
4736-
}
4742+
name = (char *)mbfl_no_encoding2name(lang->mail_charset);
4743+
RETURN_STRING(name);
47374744
} else if (zend_string_equals_literal_ci(type, "mail_header_encoding")) {
4738-
if (lang != NULL && (name = (char *)mbfl_no_encoding2name(lang->mail_header_encoding)) != NULL) {
4739-
RETVAL_STRING(name);
4740-
}
4745+
name = (char *)mbfl_no_encoding2name(lang->mail_header_encoding);
4746+
RETURN_STRING(name);
47414747
} else if (zend_string_equals_literal_ci(type, "mail_body_encoding")) {
4742-
if (lang != NULL && (name = (char *)mbfl_no_encoding2name(lang->mail_body_encoding)) != NULL) {
4743-
RETVAL_STRING(name);
4744-
}
4748+
name = (char *)mbfl_no_encoding2name(lang->mail_body_encoding);
4749+
RETURN_STRING(name);
47454750
} else if (zend_string_equals_literal_ci(type, "illegal_chars")) {
4746-
RETVAL_LONG(MBSTRG(illegalchars));
4751+
RETURN_LONG(MBSTRG(illegalchars));
47474752
} else if (zend_string_equals_literal_ci(type, "encoding_translation")) {
47484753
if (MBSTRG(encoding_translation)) {
4749-
RETVAL_STRING("On");
4754+
RETURN_STRING("On");
47504755
} else {
4751-
RETVAL_STRING("Off");
4756+
RETURN_STRING("Off");
47524757
}
47534758
} else if (zend_string_equals_literal_ci(type, "language")) {
4754-
if ((name = (char *)mbfl_no_language2name(MBSTRG(language))) != NULL) {
4755-
RETVAL_STRING(name);
4756-
}
4759+
name = (char *)mbfl_no_language2name(MBSTRG(language));
4760+
RETURN_STRING(name);
47574761
} else if (zend_string_equals_literal_ci(type, "detect_order")) {
4762+
// TODO Seems to always have one entry at least?
47584763
n = MBSTRG(current_detect_order_list_size);
47594764
entry = MBSTRG(current_detect_order_list);
47604765
if (n > 0) {
@@ -4767,22 +4772,22 @@ PHP_FUNCTION(mb_get_info)
47674772
}
47684773
} else if (zend_string_equals_literal_ci(type, "substitute_character")) {
47694774
if (MBSTRG(current_filter_illegal_mode) == MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) {
4770-
RETVAL_STRING("none");
4775+
RETURN_STRING("none");
47714776
} else if (MBSTRG(current_filter_illegal_mode) == MBFL_OUTPUTFILTER_ILLEGAL_MODE_LONG) {
4772-
RETVAL_STRING("long");
4777+
RETURN_STRING("long");
47734778
} else if (MBSTRG(current_filter_illegal_mode) == MBFL_OUTPUTFILTER_ILLEGAL_MODE_ENTITY) {
4774-
RETVAL_STRING("entity");
4779+
RETURN_STRING("entity");
47754780
} else {
4776-
RETVAL_LONG(MBSTRG(current_filter_illegal_substchar));
4781+
RETURN_LONG(MBSTRG(current_filter_illegal_substchar));
47774782
}
47784783
} else if (zend_string_equals_literal_ci(type, "strict_detection")) {
47794784
if (MBSTRG(strict_detection)) {
4780-
RETVAL_STRING("On");
4785+
RETURN_STRING("On");
47814786
} else {
4782-
RETVAL_STRING("Off");
4787+
RETURN_STRING("Off");
47834788
}
47844789
} else {
4785-
// TODO Convert to ValueError
4790+
php_error_docref(NULL, E_WARNING, "argument #1 ($type) must be a valid type");
47864791
RETURN_FALSE;
47874792
}
47884793
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
--TEST--
2+
mb_get_info() errors
3+
--EXTENSIONS--
4+
mbstring
5+
--INI--
6+
--FILE--
7+
<?php
8+
var_dump(mb_get_info("http_input"));
9+
var_dump(mb_get_info("detect_order"));
10+
var_dump(mb_get_info("non_sense"));
11+
?>
12+
--EXPECTF--
13+
NULL
14+
array(2) {
15+
[0]=>
16+
string(5) "ASCII"
17+
[1]=>
18+
string(5) "UTF-8"
19+
}
20+
21+
Warning: mb_get_info(): argument #1 ($type) must be a valid type in %s on line %d
22+
bool(false)

0 commit comments

Comments
 (0)