Skip to content

Commit 42f61fe

Browse files
committed
Remove deprecated MBString INI settings
1 parent f4b4631 commit 42f61fe

11 files changed

+69
-321
lines changed

ext/mbstring/mbstring.c

Lines changed: 54 additions & 136 deletions
Original file line numberDiff line numberDiff line change
@@ -829,120 +829,6 @@ static PHP_INI_MH(OnUpdate_mbstring_detect_order)
829829
}
830830
/* }}} */
831831

832-
static int _php_mb_ini_mbstring_http_input_set(const char *new_value, size_t new_value_length) {
833-
const mbfl_encoding **list;
834-
size_t size;
835-
if (FAILURE == php_mb_parse_encoding_list(new_value, new_value_length, &list, &size, /* persistent */ 1, /* arg_num */ 0, /* allow_pass_encoding */ 1) || size == 0) {
836-
return FAILURE;
837-
}
838-
if (MBSTRG(http_input_list)) {
839-
pefree(MBSTRG(http_input_list), 1);
840-
}
841-
MBSTRG(http_input_list) = list;
842-
MBSTRG(http_input_list_size) = size;
843-
return SUCCESS;
844-
}
845-
846-
/* {{{ static PHP_INI_MH(OnUpdate_mbstring_http_input) */
847-
static PHP_INI_MH(OnUpdate_mbstring_http_input)
848-
{
849-
if (new_value) {
850-
php_error_docref("ref.mbstring", E_DEPRECATED, "Use of mbstring.http_input is deprecated");
851-
}
852-
853-
if (!new_value || !ZSTR_VAL(new_value)) {
854-
const char *encoding = php_get_input_encoding();
855-
MBSTRG(http_input_set) = 0;
856-
_php_mb_ini_mbstring_http_input_set(encoding, strlen(encoding));
857-
return SUCCESS;
858-
}
859-
860-
MBSTRG(http_input_set) = 1;
861-
return _php_mb_ini_mbstring_http_input_set(ZSTR_VAL(new_value), ZSTR_LEN(new_value));
862-
}
863-
/* }}} */
864-
865-
static int _php_mb_ini_mbstring_http_output_set(const char *new_value) {
866-
const mbfl_encoding *encoding = php_mb_get_encoding_or_pass(new_value);
867-
if (!encoding) {
868-
return FAILURE;
869-
}
870-
871-
MBSTRG(http_output_encoding) = encoding;
872-
MBSTRG(current_http_output_encoding) = encoding;
873-
return SUCCESS;
874-
}
875-
876-
/* {{{ static PHP_INI_MH(OnUpdate_mbstring_http_output) */
877-
static PHP_INI_MH(OnUpdate_mbstring_http_output)
878-
{
879-
if (new_value) {
880-
php_error_docref("ref.mbstring", E_DEPRECATED, "Use of mbstring.http_output is deprecated");
881-
}
882-
883-
if (new_value == NULL || ZSTR_LEN(new_value) == 0) {
884-
MBSTRG(http_output_set) = 0;
885-
_php_mb_ini_mbstring_http_output_set(php_get_output_encoding());
886-
return SUCCESS;
887-
}
888-
889-
MBSTRG(http_output_set) = 1;
890-
return _php_mb_ini_mbstring_http_output_set(ZSTR_VAL(new_value));
891-
}
892-
/* }}} */
893-
894-
/* {{{ static _php_mb_ini_mbstring_internal_encoding_set */
895-
static int _php_mb_ini_mbstring_internal_encoding_set(const char *new_value, size_t new_value_length)
896-
{
897-
const mbfl_encoding *encoding;
898-
899-
if (!new_value || !new_value_length || !(encoding = mbfl_name2encoding(new_value))) {
900-
/* falls back to UTF-8 if an unknown encoding name is given */
901-
if (new_value) {
902-
php_error_docref("ref.mbstring", E_WARNING,
903-
"Unknown encoding \"%s\" in ini setting", new_value);
904-
}
905-
encoding = mbfl_no2encoding(mbfl_no_encoding_utf8);
906-
}
907-
MBSTRG(internal_encoding) = encoding;
908-
MBSTRG(current_internal_encoding) = encoding;
909-
#ifdef HAVE_MBREGEX
910-
{
911-
const char *enc_name = new_value;
912-
if (FAILURE == php_mb_regex_set_default_mbctype(enc_name)) {
913-
/* falls back to UTF-8 if an unknown encoding name is given */
914-
enc_name = "UTF-8";
915-
php_mb_regex_set_default_mbctype(enc_name);
916-
}
917-
php_mb_regex_set_mbctype(new_value);
918-
}
919-
#endif
920-
return SUCCESS;
921-
}
922-
/* }}} */
923-
924-
/* {{{ static PHP_INI_MH(OnUpdate_mbstring_internal_encoding) */
925-
static PHP_INI_MH(OnUpdate_mbstring_internal_encoding)
926-
{
927-
if (new_value) {
928-
php_error_docref("ref.mbstring", E_DEPRECATED, "Use of mbstring.internal_encoding is deprecated");
929-
}
930-
931-
if (OnUpdateString(entry, new_value, mh_arg1, mh_arg2, mh_arg3, stage) == FAILURE) {
932-
return FAILURE;
933-
}
934-
935-
if (new_value && ZSTR_LEN(new_value)) {
936-
MBSTRG(internal_encoding_set) = 1;
937-
return _php_mb_ini_mbstring_internal_encoding_set(ZSTR_VAL(new_value), ZSTR_LEN(new_value));
938-
} else {
939-
const char *encoding = php_get_internal_encoding();
940-
MBSTRG(internal_encoding_set) = 0;
941-
return _php_mb_ini_mbstring_internal_encoding_set(encoding, strlen(encoding));
942-
}
943-
}
944-
/* }}} */
945-
946832
/* {{{ static PHP_INI_MH(OnUpdate_mbstring_substitute_character) */
947833
static PHP_INI_MH(OnUpdate_mbstring_substitute_character)
948834
{
@@ -1036,9 +922,6 @@ static PHP_INI_MH(OnUpdate_mbstring_http_output_conv_mimetypes)
1036922
PHP_INI_BEGIN()
1037923
PHP_INI_ENTRY("mbstring.language", "neutral", PHP_INI_ALL, OnUpdate_mbstring_language)
1038924
PHP_INI_ENTRY("mbstring.detect_order", NULL, PHP_INI_ALL, OnUpdate_mbstring_detect_order)
1039-
PHP_INI_ENTRY("mbstring.http_input", NULL, PHP_INI_ALL, OnUpdate_mbstring_http_input)
1040-
PHP_INI_ENTRY("mbstring.http_output", NULL, PHP_INI_ALL, OnUpdate_mbstring_http_output)
1041-
STD_PHP_INI_ENTRY("mbstring.internal_encoding", NULL, PHP_INI_ALL, OnUpdate_mbstring_internal_encoding, internal_encoding_name, zend_mbstring_globals, mbstring_globals)
1042925
PHP_INI_ENTRY("mbstring.substitute_character", NULL, PHP_INI_ALL, OnUpdate_mbstring_substitute_character)
1043926

1044927
STD_PHP_INI_BOOLEAN("mbstring.encoding_translation", "0",
@@ -1061,24 +944,6 @@ PHP_INI_BEGIN()
1061944
PHP_INI_END()
1062945
/* }}} */
1063946

1064-
static void mbstring_internal_encoding_changed_hook(void) {
1065-
/* One of the internal_encoding / input_encoding / output_encoding ini settings changed. */
1066-
if (!MBSTRG(internal_encoding_set)) {
1067-
const char *encoding = php_get_internal_encoding();
1068-
_php_mb_ini_mbstring_internal_encoding_set(encoding, strlen(encoding));
1069-
}
1070-
1071-
if (!MBSTRG(http_output_set)) {
1072-
const char *encoding = php_get_output_encoding();
1073-
_php_mb_ini_mbstring_http_output_set(encoding);
1074-
}
1075-
1076-
if (!MBSTRG(http_input_set)) {
1077-
const char *encoding = php_get_input_encoding();
1078-
_php_mb_ini_mbstring_http_input_set(encoding, strlen(encoding));
1079-
}
1080-
}
1081-
1082947
/* {{{ module global initialize handler */
1083948
static PHP_GINIT_FUNCTION(mbstring)
1084949
{
@@ -1087,7 +952,7 @@ ZEND_TSRMLS_CACHE_UPDATE();
1087952
#endif
1088953

1089954
mbstring_globals->language = mbfl_no_language_uni;
1090-
mbstring_globals->internal_encoding = NULL;
955+
mbstring_globals->internal_encoding = &mbfl_encoding_utf8;
1091956
mbstring_globals->current_internal_encoding = mbstring_globals->internal_encoding;
1092957
mbstring_globals->http_output_encoding = &mbfl_encoding_pass;
1093958
mbstring_globals->current_http_output_encoding = &mbfl_encoding_pass;
@@ -1142,6 +1007,59 @@ static PHP_GSHUTDOWN_FUNCTION(mbstring)
11421007
}
11431008
/* }}} */
11441009

1010+
static void mbstring_internal_encoding_changed_hook(void) {
1011+
/* One of the internal_encoding / input_encoding / output_encoding ini settings changed. */
1012+
const char *php_encoding = php_get_internal_encoding();
1013+
const mbfl_encoding *encoding;
1014+
1015+
if (!MBSTRG(internal_encoding_set)) {
1016+
if (!(encoding = mbfl_name2encoding(php_encoding))) {
1017+
/* falls back to UTF-8 if an unknown encoding name is given */
1018+
encoding = &mbfl_encoding_utf8;
1019+
}
1020+
MBSTRG(internal_encoding) = encoding;
1021+
MBSTRG(current_internal_encoding) = encoding;
1022+
#if HAVE_MBREGEX
1023+
{
1024+
const char *enc_name = php_encoding;
1025+
if (FAILURE == php_mb_regex_set_default_mbctype(enc_name)) {
1026+
/* falls back to UTF-8 if an unknown encoding name is given */
1027+
enc_name = "UTF-8";
1028+
php_mb_regex_set_default_mbctype(enc_name);
1029+
}
1030+
php_mb_regex_set_mbctype(enc_name);
1031+
}
1032+
#endif
1033+
}
1034+
1035+
if (!MBSTRG(http_output_set)) {
1036+
php_encoding = php_get_output_encoding();
1037+
encoding = php_mb_get_encoding_or_pass(php_encoding);
1038+
if (!encoding) {
1039+
/* falls back to UTF-8 if an unknown encoding name is given */
1040+
encoding = &mbfl_encoding_utf8;
1041+
}
1042+
MBSTRG(http_output_encoding) = encoding;
1043+
MBSTRG(current_http_output_encoding) = encoding;
1044+
}
1045+
1046+
if (!MBSTRG(http_input_set)) {
1047+
php_encoding = php_get_input_encoding();
1048+
const mbfl_encoding **list;
1049+
size_t size;
1050+
if (FAILURE == php_mb_parse_encoding_list(php_encoding, strlen(php_encoding), &list, &size,
1051+
/* persistent */ 1, /* arg_num */ 0, /* allow_pass_encoding */ 1) || size == 0) {
1052+
/* on failure leave as is */
1053+
return;
1054+
}
1055+
if (MBSTRG(http_input_list)) {
1056+
pefree(MBSTRG(http_input_list), 1);
1057+
}
1058+
MBSTRG(http_input_list) = list;
1059+
MBSTRG(http_input_list_size) = size;
1060+
}
1061+
}
1062+
11451063
/* {{{ PHP_MINIT_FUNCTION(mbstring) */
11461064
PHP_MINIT_FUNCTION(mbstring)
11471065
{

ext/mbstring/tests/bug48697.phpt

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,20 @@ Bug #48697 (mb_internal_encoding() value gets reset by parse_str() or mb_parse_s
44
<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?>
55
--FILE--
66
<?php
7-
ini_set('mbstring.internal_encoding', 'ISO-8859-15');
87
ini_set('mbstring.encoding_translation', true);
98
var_dump(mb_internal_encoding());
10-
mb_internal_encoding('UTF-8');
9+
mb_internal_encoding('ISO-8859-15');
1110
var_dump(mb_internal_encoding());
1211
parse_str('a=b', $ary);
1312
var_dump(mb_internal_encoding());
14-
mb_internal_encoding('UTF-8');
13+
mb_internal_encoding('ISO-8859-15');
1514
var_dump(mb_internal_encoding());
1615
parse_str('a=b', $ary);
1716
var_dump(mb_internal_encoding());
1817
?>
19-
--EXPECTF--
20-
Deprecated: ini_set(): Use of mbstring.internal_encoding is deprecated in %s on line %d
21-
string(11) "ISO-8859-15"
22-
string(5) "UTF-8"
23-
string(5) "UTF-8"
24-
string(5) "UTF-8"
18+
--EXPECT--
2519
string(5) "UTF-8"
20+
string(11) "ISO-8859-15"
21+
string(11) "ISO-8859-15"
22+
string(11) "ISO-8859-15"
23+
string(11) "ISO-8859-15"

ext/mbstring/tests/ini_encoding.phpt

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,10 @@ Encoding INI test
33
--SKIPIF--
44
<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?>
55
--INI--
6-
error_reporting=E_ALL & ~E_DEPRECATED
76
default_charset=Shift_JIS
87
internal_encoding=
98
input_encoding=
109
output_encoding=
11-
mbstring.internal_encoding=Shift_JIS
12-
mbstring.http_input=Shift_JIS
13-
mbstring.http_output=Shift_JIS
1410
--FILE--
1511
<?php
1612
echo "Getting INI\n";
@@ -19,54 +15,36 @@ var_dump(ini_get('internal_encoding'));
1915
var_dump(ini_get('input_encoding'));
2016
var_dump(ini_get('output_encoding'));
2117

22-
var_dump(ini_get('mbstring.internal_encoding'));
2318
var_dump(mb_internal_encoding());
24-
var_dump(ini_get('mbstring.http_input'));
25-
var_dump(ini_get('mbstring.http_output'));
2619

2720
echo "Setting INI\n";
2821
var_dump(ini_set('default_charset', 'UTF-8'));
2922
var_dump(ini_set('internal_encoding', 'UTF-8'));
3023
var_dump(ini_set('input_encoding', 'UTF-8'));
3124
var_dump(ini_set('output_encoding', 'UTF-8'));
32-
var_dump(ini_set('mbstring.internal_encoding', 'UTF-8'));
33-
var_dump(ini_set('mbstring.http_input', 'UTF-8'));
34-
var_dump(ini_set('mbstring.http_output', 'UTF-8'));
3525

3626
echo "Getting INI\n";
3727
var_dump(ini_get('default_charset'));
3828
var_dump(ini_get('internal_encoding'));
3929
var_dump(ini_get('input_encoding'));
4030
var_dump(ini_get('output_encoding'));
4131

42-
var_dump(ini_get('mbstring.internal_encoding'));
4332
var_dump(mb_internal_encoding());
44-
var_dump(ini_get('mbstring.http_input'));
45-
var_dump(ini_get('mbstring.http_output'));
4633
--EXPECT--
4734
Getting INI
4835
string(9) "Shift_JIS"
4936
string(0) ""
5037
string(0) ""
5138
string(0) ""
52-
string(9) "Shift_JIS"
5339
string(4) "SJIS"
54-
string(9) "Shift_JIS"
55-
string(9) "Shift_JIS"
5640
Setting INI
5741
string(9) "Shift_JIS"
5842
string(0) ""
5943
string(0) ""
6044
string(0) ""
61-
string(9) "Shift_JIS"
62-
string(9) "Shift_JIS"
63-
string(9) "Shift_JIS"
6445
Getting INI
6546
string(5) "UTF-8"
6647
string(5) "UTF-8"
6748
string(5) "UTF-8"
6849
string(5) "UTF-8"
6950
string(5) "UTF-8"
70-
string(5) "UTF-8"
71-
string(5) "UTF-8"
72-
string(5) "UTF-8"

ext/mbstring/tests/ini_encoding2.phpt

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,10 @@ Encoding INI test
33
--SKIPIF--
44
<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?>
55
--INI--
6-
error_reporting=E_ALL & ~E_DEPRECATED
76
default_charset=
87
internal_encoding=EUC-JP
98
input_encoding=
109
output_encoding=
11-
mbstring.internal_encoding=
12-
mbstring.http_input=
13-
mbstring.http_output=
1410
--FILE--
1511
<?php
1612
echo "Getting INI\n";
@@ -19,54 +15,36 @@ var_dump(ini_get('internal_encoding'));
1915
var_dump(ini_get('input_encoding'));
2016
var_dump(ini_get('output_encoding'));
2117

22-
var_dump(ini_get('mbstring.internal_encoding'));
2318
var_dump(mb_internal_encoding());
24-
var_dump(ini_get('mbstring.http_input'));
25-
var_dump(ini_get('mbstring.http_output'));
2619

2720
echo "Setting INI\n";
2821
var_dump(ini_set('default_charset', 'UTF-8'));
2922
var_dump(ini_set('internal_encoding', 'UTF-8'));
3023
var_dump(ini_set('input_encoding', 'UTF-8'));
3124
var_dump(ini_set('output_encoding', 'UTF-8'));
32-
var_dump(ini_set('mbstring.internal_encoding', 'UTF-8'));
33-
var_dump(ini_set('mbstring.http_input', 'UTF-8'));
34-
var_dump(ini_set('mbstring.http_output', 'UTF-8'));
3525

3626
echo "Getting INI\n";
3727
var_dump(ini_get('default_charset'));
3828
var_dump(ini_get('internal_encoding'));
3929
var_dump(ini_get('input_encoding'));
4030
var_dump(ini_get('output_encoding'));
4131

42-
var_dump(ini_get('mbstring.internal_encoding'));
4332
var_dump(mb_internal_encoding());
44-
var_dump(ini_get('mbstring.http_input'));
45-
var_dump(ini_get('mbstring.http_output'));
4633
--EXPECT--
4734
Getting INI
4835
string(0) ""
4936
string(6) "EUC-JP"
5037
string(0) ""
5138
string(0) ""
52-
string(0) ""
5339
string(6) "EUC-JP"
54-
string(0) ""
55-
string(0) ""
5640
Setting INI
5741
string(0) ""
5842
string(6) "EUC-JP"
5943
string(0) ""
6044
string(0) ""
61-
string(0) ""
62-
string(0) ""
63-
string(0) ""
6445
Getting INI
6546
string(5) "UTF-8"
6647
string(5) "UTF-8"
6748
string(5) "UTF-8"
6849
string(5) "UTF-8"
6950
string(5) "UTF-8"
70-
string(5) "UTF-8"
71-
string(5) "UTF-8"
72-
string(5) "UTF-8"

0 commit comments

Comments
 (0)