From: Nikita Popov Date: Thu, 7 May 2020 12:43:36 +0000 (+0200) Subject: Throw warning if invalid internal_encoding ini is specified X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=481b7421f3dc2f2706e54dc1b8d4701960fde4aa;p=php Throw warning if invalid internal_encoding ini is specified --- diff --git a/ext/mbstring/mbstring.c b/ext/mbstring/mbstring.c index f42b449c34..84e28f4a4b 100644 --- a/ext/mbstring/mbstring.c +++ b/ext/mbstring/mbstring.c @@ -898,6 +898,10 @@ static int _php_mb_ini_mbstring_internal_encoding_set(const char *new_value, siz if (!new_value || !new_value_length || !(encoding = mbfl_name2encoding(new_value))) { /* falls back to UTF-8 if an unknown encoding name is given */ + if (new_value) { + php_error_docref("ref.mbstring", E_WARNING, + "Unknown encoding \"%s\" in ini setting", new_value); + } encoding = mbfl_no2encoding(mbfl_no_encoding_utf8); } MBSTRG(internal_encoding) = encoding; diff --git a/ext/mbstring/tests/ini_mbstring_invalid.phpt b/ext/mbstring/tests/ini_mbstring_invalid.phpt index 57f2404fc7..17a1efd245 100644 --- a/ext/mbstring/tests/ini_mbstring_invalid.phpt +++ b/ext/mbstring/tests/ini_mbstring_invalid.phpt @@ -23,6 +23,7 @@ PHP Deprecated: PHP Startup: Use of mbstring.http_input is deprecated in Unknow PHP Warning: PHP Startup: INI setting contains invalid encoding "HTTP_INPUT" in Unknown on line 0 PHP Deprecated: PHP Startup: Use of mbstring.http_output is deprecated in Unknown on line 0 PHP Deprecated: PHP Startup: Use of mbstring.internal_encoding is deprecated in Unknown on line 0 +PHP Warning: PHP Startup: Unknown encoding "UNKNOWN_ENCODING" in ini setting in Unknown on line 0 Warning: PHP Startup: INI setting contains invalid encoding "DETECT_ORDER" in Unknown on line 0 @@ -33,3 +34,5 @@ Warning: PHP Startup: INI setting contains invalid encoding "HTTP_INPUT" in Unkn 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 diff --git a/ext/mbstring/tests/mb_internal_encoding_ini_invalid_encoding.phpt b/ext/mbstring/tests/mb_internal_encoding_ini_invalid_encoding.phpt index 9f3ce5f8c5..4d2fb1eca1 100644 --- a/ext/mbstring/tests/mb_internal_encoding_ini_invalid_encoding.phpt +++ b/ext/mbstring/tests/mb_internal_encoding_ini_invalid_encoding.phpt @@ -21,8 +21,11 @@ echo ini_get('mbstring.internal_encoding')."\n"; ?> --EXPECT-- PHP Deprecated: PHP Startup: Use of mbstring.internal_encoding is deprecated in Unknown on line 0 +PHP Warning: PHP Startup: Unknown encoding "BAD" in ini setting 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 "BAD" in ini setting in Unknown on line 0 *** Testing INI mbstring.internal_encoding: invalid encoding specified in INI *** UTF-8 BAD diff --git a/ext/standard/html.c b/ext/standard/html.c index 5eaf7c6711..aa971d5098 100644 --- a/ext/standard/html.c +++ b/ext/standard/html.c @@ -386,10 +386,7 @@ static enum entity_charset determine_charset(char *charset_hint) if (zenc != NULL) { charset_hint = (char *)zend_multibyte_get_encoding_name(zenc); if (charset_hint != NULL && (len=strlen(charset_hint)) != 0) { - if ((len == 4) /* sizeof (auto|pass) */ && - /* XXX should the "wchar" be ignored as well?? */ - (!memcmp("pass", charset_hint, 4) || - !memcmp("auto", charset_hint, 4))) { + if (len == sizeof("auto")-1 && !memcmp("auto", charset_hint, sizeof("auto")-1)) { charset_hint = NULL; len = 0; } else { diff --git a/ext/standard/tests/strings/htmlentities01.phpt b/ext/standard/tests/strings/htmlentities01.phpt index 269bd467b9..32f9e8edd1 100644 --- a/ext/standard/tests/strings/htmlentities01.phpt +++ b/ext/standard/tests/strings/htmlentities01.phpt @@ -2,11 +2,10 @@ htmlentities() test 1 (cp1252) --INI-- output_handler= -internal_encoding=pass --FILE-- --EXPECT-- string(28) "‚†™Ÿ" diff --git a/ext/standard/tests/strings/htmlentities02.phpt b/ext/standard/tests/strings/htmlentities02.phpt index 6dcc4de483..9e6a96e060 100644 --- a/ext/standard/tests/strings/htmlentities02.phpt +++ b/ext/standard/tests/strings/htmlentities02.phpt @@ -10,11 +10,12 @@ if (!$result) { --INI-- output_handler= default_charset= -internal_encoding=pass +internal_encoding= --FILE-- --EXPECT-- -string(20) "ŒœŸ" +string(0) "" diff --git a/ext/standard/tests/strings/htmlentities03.phpt b/ext/standard/tests/strings/htmlentities03.phpt index b7e07fb375..4840653414 100644 --- a/ext/standard/tests/strings/htmlentities03.phpt +++ b/ext/standard/tests/strings/htmlentities03.phpt @@ -10,11 +10,12 @@ if (!$result || preg_match('/ISO/i', setlocale(LC_CTYPE, 0)) == 0) { --INI-- output_handler= default_charset= -internal_encoding=pass +internal_encoding= --FILE-- --EXPECT-- -string(18) "äöü" +string(0) "" diff --git a/ext/standard/tests/strings/htmlentities10.phpt b/ext/standard/tests/strings/htmlentities10.phpt index 2f8c42b7e5..58c0b14b1e 100644 --- a/ext/standard/tests/strings/htmlentities10.phpt +++ b/ext/standard/tests/strings/htmlentities10.phpt @@ -2,13 +2,12 @@ htmlentities() test 10 (default_charset / cp1252) --INI-- output_handler= -internal_encoding=pass default_charset=cp1252 --FILE-- --EXPECT-- cp1252 diff --git a/ext/standard/tests/strings/htmlentities11.phpt b/ext/standard/tests/strings/htmlentities11.phpt index c803f76a53..f34db6e2dd 100644 --- a/ext/standard/tests/strings/htmlentities11.phpt +++ b/ext/standard/tests/strings/htmlentities11.phpt @@ -2,12 +2,11 @@ htmlentities() test 11 (default_charset / ISO-8859-15) --INI-- output_handler= -internal_encoding=pass default_charset=ISO-8859-15 --FILE-- --EXPECT-- ISO-8859-15 diff --git a/ext/standard/tests/strings/htmlentities12.phpt b/ext/standard/tests/strings/htmlentities12.phpt index c2963f1c86..fdf52393f3 100644 --- a/ext/standard/tests/strings/htmlentities12.phpt +++ b/ext/standard/tests/strings/htmlentities12.phpt @@ -2,12 +2,11 @@ htmlentities() test 12 (default_charset / ISO-8859-1) --INI-- output_handler= -internal_encoding=pass default_charset=ISO-8859-1 --FILE-- --EXPECT-- ISO-8859-1 diff --git a/ext/standard/tests/strings/htmlentities13.phpt b/ext/standard/tests/strings/htmlentities13.phpt index ac2c8cd4b0..03b970df15 100644 --- a/ext/standard/tests/strings/htmlentities13.phpt +++ b/ext/standard/tests/strings/htmlentities13.phpt @@ -2,13 +2,12 @@ htmlentities() test 13 (default_charset / EUC-JP) --INI-- output_handler= -internal_encoding=pass default_charset=EUC-JP filter.default=unsafe_raw --FILE-- --EXPECTF-- EUC-JP diff --git a/ext/standard/tests/strings/htmlentities14.phpt b/ext/standard/tests/strings/htmlentities14.phpt index 60226cbe10..6850f31f89 100644 --- a/ext/standard/tests/strings/htmlentities14.phpt +++ b/ext/standard/tests/strings/htmlentities14.phpt @@ -2,13 +2,12 @@ htmlentities() test 14 (default_charset / Shift_JIS) --INI-- output_handler= -internal_encoding=pass default_charset=Shift_JIS filter.default=unsafe_raw --FILE-- --EXPECTF-- Shift_JIS