Skip to content

Remove long-deprecated mbstring INI settings #12445

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions NEWS
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@ DOM:
Intl:
. Added IntlDateFormatter::PATTERN constant. (David Carlier)

MBString:
. Long-deprecated INI settings mbstring.http_input, mbstring.http_output,
and mbstring.internal_encoding have been removed. (Alex Dowad)

Opcache:
. Added large shared segments support for FreeBSD. (David Carlier)

Expand Down
70 changes: 2 additions & 68 deletions ext/mbstring/mbstring.c
Original file line number Diff line number Diff line change
Expand Up @@ -738,25 +738,6 @@ static int _php_mb_ini_mbstring_http_input_set(const char *new_value, size_t new
return SUCCESS;
}

/* {{{ static PHP_INI_MH(OnUpdate_mbstring_http_input) */
static PHP_INI_MH(OnUpdate_mbstring_http_input)
{
if (new_value) {
php_error_docref("ref.mbstring", E_DEPRECATED, "Use of mbstring.http_input is deprecated");
}

if (!new_value || !ZSTR_LEN(new_value)) {
const char *encoding = php_get_input_encoding();
MBSTRG(http_input_set) = 0;
_php_mb_ini_mbstring_http_input_set(encoding, strlen(encoding));
return SUCCESS;
}

MBSTRG(http_input_set) = 1;
return _php_mb_ini_mbstring_http_input_set(ZSTR_VAL(new_value), ZSTR_LEN(new_value));
}
/* }}} */

static int _php_mb_ini_mbstring_http_output_set(const char *new_value) {
const mbfl_encoding *encoding = php_mb_get_encoding_or_pass(new_value);
if (!encoding) {
Expand All @@ -768,24 +749,6 @@ static int _php_mb_ini_mbstring_http_output_set(const char *new_value) {
return SUCCESS;
}

/* {{{ static PHP_INI_MH(OnUpdate_mbstring_http_output) */
static PHP_INI_MH(OnUpdate_mbstring_http_output)
{
if (new_value) {
php_error_docref("ref.mbstring", E_DEPRECATED, "Use of mbstring.http_output is deprecated");
}

if (new_value == NULL || ZSTR_LEN(new_value) == 0) {
MBSTRG(http_output_set) = 0;
_php_mb_ini_mbstring_http_output_set(php_get_output_encoding());
return SUCCESS;
}

MBSTRG(http_output_set) = 1;
return _php_mb_ini_mbstring_http_output_set(ZSTR_VAL(new_value));
}
/* }}} */

/* {{{ static _php_mb_ini_mbstring_internal_encoding_set */
static int _php_mb_ini_mbstring_internal_encoding_set(const char *new_value, size_t new_value_length)
{
Expand Down Expand Up @@ -815,28 +778,6 @@ static int _php_mb_ini_mbstring_internal_encoding_set(const char *new_value, siz
}
/* }}} */

/* {{{ static PHP_INI_MH(OnUpdate_mbstring_internal_encoding) */
static PHP_INI_MH(OnUpdate_mbstring_internal_encoding)
{
if (new_value) {
php_error_docref("ref.mbstring", E_DEPRECATED, "Use of mbstring.internal_encoding is deprecated");
}

if (OnUpdateString(entry, new_value, mh_arg1, mh_arg2, mh_arg3, stage) == FAILURE) {
return FAILURE;
}

if (new_value && ZSTR_LEN(new_value)) {
MBSTRG(internal_encoding_set) = 1;
return _php_mb_ini_mbstring_internal_encoding_set(ZSTR_VAL(new_value), ZSTR_LEN(new_value));
} else {
const char *encoding = php_get_internal_encoding();
MBSTRG(internal_encoding_set) = 0;
return _php_mb_ini_mbstring_internal_encoding_set(encoding, strlen(encoding));
}
}
/* }}} */

/* {{{ static PHP_INI_MH(OnUpdate_mbstring_substitute_character) */
static PHP_INI_MH(OnUpdate_mbstring_substitute_character)
{
Expand Down Expand Up @@ -930,9 +871,6 @@ static PHP_INI_MH(OnUpdate_mbstring_http_output_conv_mimetypes)
PHP_INI_BEGIN()
PHP_INI_ENTRY("mbstring.language", "neutral", PHP_INI_ALL, OnUpdate_mbstring_language)
PHP_INI_ENTRY("mbstring.detect_order", NULL, PHP_INI_ALL, OnUpdate_mbstring_detect_order)
PHP_INI_ENTRY("mbstring.http_input", NULL, PHP_INI_ALL, OnUpdate_mbstring_http_input)
PHP_INI_ENTRY("mbstring.http_output", NULL, PHP_INI_ALL, OnUpdate_mbstring_http_output)
STD_PHP_INI_ENTRY("mbstring.internal_encoding", NULL, PHP_INI_ALL, OnUpdate_mbstring_internal_encoding, internal_encoding_name, zend_mbstring_globals, mbstring_globals)
PHP_INI_ENTRY("mbstring.substitute_character", NULL, PHP_INI_ALL, OnUpdate_mbstring_substitute_character)

STD_PHP_INI_BOOLEAN("mbstring.encoding_translation", "0",
Expand Down Expand Up @@ -967,10 +905,8 @@ static void mbstring_internal_encoding_changed_hook(void) {
_php_mb_ini_mbstring_http_output_set(encoding);
}

if (!MBSTRG(http_input_set)) {
const char *encoding = php_get_input_encoding();
_php_mb_ini_mbstring_http_input_set(encoding, strlen(encoding));
}
const char *encoding = php_get_input_encoding();
_php_mb_ini_mbstring_http_input_set(encoding, strlen(encoding));
}

/* {{{ module global initialize handler */
Expand Down Expand Up @@ -1015,7 +951,6 @@ ZEND_TSRMLS_CACHE_UPDATE();
mbstring_globals->last_used_encoding = NULL;
mbstring_globals->internal_encoding_set = 0;
mbstring_globals->http_output_set = 0;
mbstring_globals->http_input_set = 0;
mbstring_globals->all_encodings_list = NULL;
}
/* }}} */
Expand Down Expand Up @@ -1152,7 +1087,6 @@ PHP_RSHUTDOWN_FUNCTION(mbstring)

MBSTRG(internal_encoding_set) = 0;
MBSTRG(http_output_set) = 0;
MBSTRG(http_input_set) = 0;

MBSTRG(outconv_enabled) = false;
MBSTRG(outconv_state) = 0;
Expand Down
2 changes: 0 additions & 2 deletions ext/mbstring/mbstring.h
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,6 @@ MBSTRING_API bool php_mb_check_encoding(const char *input, size_t length, const
MBSTRING_API const mbfl_encoding* mb_guess_encoding_for_strings(const unsigned char **strings, size_t *str_lengths, size_t n, const mbfl_encoding **elist, unsigned int elist_size, bool strict, bool order_significant);

ZEND_BEGIN_MODULE_GLOBALS(mbstring)
char *internal_encoding_name;
const mbfl_encoding *internal_encoding;
const mbfl_encoding *current_internal_encoding;
const mbfl_encoding *http_output_encoding;
Expand Down Expand Up @@ -109,7 +108,6 @@ ZEND_BEGIN_MODULE_GLOBALS(mbstring)
/* Whether an explicit internal_encoding / http_output / http_input encoding was set. */
bool internal_encoding_set;
bool http_output_set;
bool http_input_set;
Comment on lines 109 to -112
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why are the two other fields not removed?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Because while http_input_set was only written from the handler for writes to mbstring.http_input, http_output_set (for example) is also written by the function mb_http_output. Same for internal_encoding_set.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ACK, we probably should deprecate the functions that affect those fields.

#ifdef HAVE_MBREGEX
zend_long regex_retry_limit;
#endif
Expand Down
4 changes: 1 addition & 3 deletions ext/mbstring/tests/bug48697.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ Bug #48697 (mb_internal_encoding() value gets reset by parse_str() or mb_parse_s
mbstring
--FILE--
<?php
ini_set('mbstring.internal_encoding', 'ISO-8859-15');
ini_set('mbstring.encoding_translation', true);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unrelated: This could use the INI PHPT section to set the INI config

var_dump(mb_internal_encoding());
mb_internal_encoding('UTF-8');
Expand All @@ -17,8 +16,7 @@ parse_str('a=b', $ary);
var_dump(mb_internal_encoding());
?>
--EXPECTF--
Deprecated: ini_set(): Use of mbstring.internal_encoding is deprecated in %s on line %d
string(11) "ISO-8859-15"
string(5) "UTF-8"
string(5) "UTF-8"
string(5) "UTF-8"
string(5) "UTF-8"
Expand Down
21 changes: 0 additions & 21 deletions ext/mbstring/tests/ini_encoding.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,6 @@ default_charset=Shift_JIS
internal_encoding=
input_encoding=
output_encoding=
mbstring.internal_encoding=Shift_JIS
mbstring.http_input=Shift_JIS
mbstring.http_output=Shift_JIS
--FILE--
<?php
echo "Getting INI\n";
Expand All @@ -19,55 +16,37 @@ var_dump(ini_get('internal_encoding'));
var_dump(ini_get('input_encoding'));
var_dump(ini_get('output_encoding'));

var_dump(ini_get('mbstring.internal_encoding'));
var_dump(mb_internal_encoding());
var_dump(ini_get('mbstring.http_input'));
var_dump(ini_get('mbstring.http_output'));

echo "Setting INI\n";
var_dump(ini_set('default_charset', 'UTF-8'));
var_dump(ini_set('internal_encoding', 'UTF-8'));
var_dump(ini_set('input_encoding', 'UTF-8'));
var_dump(ini_set('output_encoding', 'UTF-8'));
var_dump(ini_set('mbstring.internal_encoding', 'UTF-8'));
var_dump(ini_set('mbstring.http_input', 'UTF-8'));
var_dump(ini_set('mbstring.http_output', 'UTF-8'));

echo "Getting INI\n";
var_dump(ini_get('default_charset'));
var_dump(ini_get('internal_encoding'));
var_dump(ini_get('input_encoding'));
var_dump(ini_get('output_encoding'));

var_dump(ini_get('mbstring.internal_encoding'));
var_dump(mb_internal_encoding());
var_dump(ini_get('mbstring.http_input'));
var_dump(ini_get('mbstring.http_output'));
?>
--EXPECT--
Getting INI
string(9) "Shift_JIS"
string(0) ""
string(0) ""
string(0) ""
string(9) "Shift_JIS"
string(4) "SJIS"
string(9) "Shift_JIS"
string(9) "Shift_JIS"
Setting INI
string(9) "Shift_JIS"
string(0) ""
string(0) ""
string(0) ""
string(9) "Shift_JIS"
string(9) "Shift_JIS"
string(9) "Shift_JIS"
Getting INI
string(5) "UTF-8"
string(5) "UTF-8"
string(5) "UTF-8"
string(5) "UTF-8"
string(5) "UTF-8"
string(5) "UTF-8"
string(5) "UTF-8"
string(5) "UTF-8"
21 changes: 0 additions & 21 deletions ext/mbstring/tests/ini_encoding2.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,6 @@ default_charset=
internal_encoding=EUC-JP
input_encoding=
output_encoding=
mbstring.internal_encoding=
mbstring.http_input=
mbstring.http_output=
--FILE--
<?php
echo "Getting INI\n";
Expand All @@ -19,55 +16,37 @@ var_dump(ini_get('internal_encoding'));
var_dump(ini_get('input_encoding'));
var_dump(ini_get('output_encoding'));

var_dump(ini_get('mbstring.internal_encoding'));
var_dump(mb_internal_encoding());
var_dump(ini_get('mbstring.http_input'));
var_dump(ini_get('mbstring.http_output'));

echo "Setting INI\n";
var_dump(ini_set('default_charset', 'UTF-8'));
var_dump(ini_set('internal_encoding', 'UTF-8'));
var_dump(ini_set('input_encoding', 'UTF-8'));
var_dump(ini_set('output_encoding', 'UTF-8'));
var_dump(ini_set('mbstring.internal_encoding', 'UTF-8'));
var_dump(ini_set('mbstring.http_input', 'UTF-8'));
var_dump(ini_set('mbstring.http_output', 'UTF-8'));

echo "Getting INI\n";
var_dump(ini_get('default_charset'));
var_dump(ini_get('internal_encoding'));
var_dump(ini_get('input_encoding'));
var_dump(ini_get('output_encoding'));

var_dump(ini_get('mbstring.internal_encoding'));
var_dump(mb_internal_encoding());
var_dump(ini_get('mbstring.http_input'));
var_dump(ini_get('mbstring.http_output'));
?>
--EXPECT--
Getting INI
string(0) ""
string(6) "EUC-JP"
string(0) ""
string(0) ""
string(0) ""
string(6) "EUC-JP"
string(0) ""
string(0) ""
Setting INI
string(0) ""
string(6) "EUC-JP"
string(0) ""
string(0) ""
string(0) ""
string(0) ""
string(0) ""
Getting INI
string(5) "UTF-8"
string(5) "UTF-8"
string(5) "UTF-8"
string(5) "UTF-8"
string(5) "UTF-8"
string(5) "UTF-8"
string(5) "UTF-8"
string(5) "UTF-8"
13 changes: 0 additions & 13 deletions ext/mbstring/tests/ini_mbstring_invalid.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,7 @@ Invalid values for MBString INI settings
mbstring
--INI--
mbstring.language=UNKNOWN_LANGUAGE
mbstring.internal_encoding=UNKNOWN_ENCODING
mbstring.detect_order=UTF-8,DETECT_ORDER,ASCII
mbstring.http_input=UTF-8,HTTP_INPUT,ASCII
mbstring.http_output=HTTP_OUTPUT
mbstring.http_output_conv_mimetypes=UNKNOWN_MIME_TYPE_OUTPUT
mbstring.substitute_character=U+3000,NON_EXISTING_CHARACTER,JIS+7E7E
mbstring.encoding_translation=BOOL_TRANSLATION
Expand All @@ -18,13 +15,3 @@ mbstring.strict_detection=BOOL_STRICT_DETECTION
?>
--EXPECT--
Warning: PHP Startup: INI setting contains invalid encoding "DETECT_ORDER" in Unknown on line 0

Deprecated: PHP Startup: Use of mbstring.http_input is deprecated in Unknown on line 0

Warning: PHP Startup: INI setting contains invalid encoding "HTTP_INPUT" in Unknown on line 0

Deprecated: PHP Startup: Use of mbstring.http_output is deprecated in Unknown on line 0

Deprecated: PHP Startup: Use of mbstring.internal_encoding is deprecated in Unknown on line 0

Warning: PHP Startup: Unknown encoding "UNKNOWN_ENCODING" in ini setting in Unknown on line 0
30 changes: 0 additions & 30 deletions ext/mbstring/tests/internal_encoding.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -10,23 +10,11 @@ internal_encoding=iso-8859-1
var_dump(mb_internal_encoding());
var_dump(mb_strlen("\xc3\xb6"));

ini_set('mbstring.internal_encoding', 'utf-8');

var_dump(mb_internal_encoding());
var_dump(mb_strlen("\xc3\xb6"));

// mbstring.internal_encoding is set, this has no effect
ini_set('internal_encoding', 'iso-8859-2');

var_dump(mb_internal_encoding());
var_dump(mb_strlen("\xc3\xb6"));

// mbstring.internal_encoding is unset, pick up internal_encoding again
ini_set('mbstring.internal_encoding', '');

var_dump(mb_internal_encoding());
var_dump(mb_strlen("\xc3\xb6"));

mb_internal_encoding('utf-8');

var_dump(mb_internal_encoding());
Expand All @@ -38,31 +26,13 @@ ini_set('internal_encoding', 'iso-8859-3');
var_dump(mb_internal_encoding());
var_dump(mb_strlen("\xc3\xb6"));

// mbstring.internal_encoding is unset, pick up internal_encoding again
ini_set('mbstring.internal_encoding', '');

var_dump(mb_internal_encoding());
var_dump(mb_strlen("\xc3\xb6"));

?>
--EXPECTF--
string(10) "ISO-8859-1"
int(2)

Deprecated: ini_set(): Use of mbstring.internal_encoding is deprecated in %s on line %d
string(5) "UTF-8"
int(1)
string(5) "UTF-8"
int(1)

Deprecated: ini_set(): Use of mbstring.internal_encoding is deprecated in %s on line %d
string(10) "ISO-8859-2"
int(2)
string(5) "UTF-8"
int(1)
string(5) "UTF-8"
int(1)

Deprecated: ini_set(): Use of mbstring.internal_encoding is deprecated in %s on line %d
string(10) "ISO-8859-3"
int(2)
Loading