Skip to content

Commit 481b742

Browse files
committed
Throw warning if invalid internal_encoding ini is specified
1 parent 98acdbf commit 481b742

12 files changed

+34
-31
lines changed

ext/mbstring/mbstring.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -898,6 +898,10 @@ static int _php_mb_ini_mbstring_internal_encoding_set(const char *new_value, siz
898898

899899
if (!new_value || !new_value_length || !(encoding = mbfl_name2encoding(new_value))) {
900900
/* 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+
}
901905
encoding = mbfl_no2encoding(mbfl_no_encoding_utf8);
902906
}
903907
MBSTRG(internal_encoding) = encoding;

ext/mbstring/tests/ini_mbstring_invalid.phpt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ PHP Deprecated: PHP Startup: Use of mbstring.http_input is deprecated in Unknow
2323
PHP Warning: PHP Startup: INI setting contains invalid encoding "HTTP_INPUT" in Unknown on line 0
2424
PHP Deprecated: PHP Startup: Use of mbstring.http_output is deprecated in Unknown on line 0
2525
PHP Deprecated: PHP Startup: Use of mbstring.internal_encoding is deprecated in Unknown on line 0
26+
PHP Warning: PHP Startup: Unknown encoding "UNKNOWN_ENCODING" in ini setting in Unknown on line 0
2627

2728
Warning: PHP Startup: INI setting contains invalid encoding "DETECT_ORDER" in Unknown on line 0
2829

@@ -33,3 +34,5 @@ Warning: PHP Startup: INI setting contains invalid encoding "HTTP_INPUT" in Unkn
3334
Deprecated: PHP Startup: Use of mbstring.http_output is deprecated in Unknown on line 0
3435

3536
Deprecated: PHP Startup: Use of mbstring.internal_encoding is deprecated in Unknown on line 0
37+
38+
Warning: PHP Startup: Unknown encoding "UNKNOWN_ENCODING" in ini setting in Unknown on line 0

ext/mbstring/tests/mb_internal_encoding_ini_invalid_encoding.phpt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,11 @@ echo ini_get('mbstring.internal_encoding')."\n";
2121
?>
2222
--EXPECT--
2323
PHP Deprecated: PHP Startup: Use of mbstring.internal_encoding is deprecated in Unknown on line 0
24+
PHP Warning: PHP Startup: Unknown encoding "BAD" in ini setting in Unknown on line 0
2425

2526
Deprecated: PHP Startup: Use of mbstring.internal_encoding is deprecated in Unknown on line 0
27+
28+
Warning: PHP Startup: Unknown encoding "BAD" in ini setting in Unknown on line 0
2629
*** Testing INI mbstring.internal_encoding: invalid encoding specified in INI ***
2730
UTF-8
2831
BAD

ext/standard/html.c

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -386,10 +386,7 @@ static enum entity_charset determine_charset(char *charset_hint)
386386
if (zenc != NULL) {
387387
charset_hint = (char *)zend_multibyte_get_encoding_name(zenc);
388388
if (charset_hint != NULL && (len=strlen(charset_hint)) != 0) {
389-
if ((len == 4) /* sizeof (auto|pass) */ &&
390-
/* XXX should the "wchar" be ignored as well?? */
391-
(!memcmp("pass", charset_hint, 4) ||
392-
!memcmp("auto", charset_hint, 4))) {
389+
if (len == sizeof("auto")-1 && !memcmp("auto", charset_hint, sizeof("auto")-1)) {
393390
charset_hint = NULL;
394391
len = 0;
395392
} else {

ext/standard/tests/strings/htmlentities01.phpt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,10 @@
22
htmlentities() test 1 (cp1252)
33
--INI--
44
output_handler=
5-
internal_encoding=pass
65
--FILE--
76
<?php
8-
var_dump(htmlentities("\x82\x86\x99\x9f", ENT_QUOTES, 'cp1252'));
9-
var_dump(htmlentities("\x80\xa2\xa3\xa4\xa5", ENT_QUOTES, 'cp1252'));
7+
var_dump(htmlentities("\x82\x86\x99\x9f", ENT_QUOTES, 'cp1252'));
8+
var_dump(htmlentities("\x80\xa2\xa3\xa4\xa5", ENT_QUOTES, 'cp1252'));
109
?>
1110
--EXPECT--
1211
string(28) "&sbquo;&dagger;&trade;&Yuml;"

ext/standard/tests/strings/htmlentities02.phpt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,12 @@ if (!$result) {
1010
--INI--
1111
output_handler=
1212
default_charset=
13-
internal_encoding=pass
13+
internal_encoding=
1414
--FILE--
1515
<?php
16-
setlocale(LC_CTYPE, "fr_FR.ISO-8859-15", "fr_FR.ISO8859-15", 'fr_FR@euro');
17-
var_dump(htmlentities("\xbc\xbd\xbe", ENT_QUOTES, ''));
16+
// Locale-based encoding guessing no longer works.
17+
setlocale(LC_CTYPE, "fr_FR.ISO-8859-15", "fr_FR.ISO8859-15", 'fr_FR@euro');
18+
var_dump(htmlentities("\xbc\xbd\xbe", ENT_QUOTES, ''));
1819
?>
1920
--EXPECT--
20-
string(20) "&OElig;&oelig;&Yuml;"
21+
string(0) ""

ext/standard/tests/strings/htmlentities03.phpt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,12 @@ if (!$result || preg_match('/ISO/i', setlocale(LC_CTYPE, 0)) == 0) {
1010
--INI--
1111
output_handler=
1212
default_charset=
13-
internal_encoding=pass
13+
internal_encoding=
1414
--FILE--
1515
<?php
16-
setlocale( LC_CTYPE, "de_DE.ISO-8859-1", "de_DE.ISO8859-1");
17-
var_dump(htmlentities("\xe4\xf6\xfc", ENT_QUOTES, ''));
16+
// Locale-based encoding guessing no longer works.
17+
setlocale( LC_CTYPE, "de_DE.ISO-8859-1", "de_DE.ISO8859-1");
18+
var_dump(htmlentities("\xe4\xf6\xfc", ENT_QUOTES));
1819
?>
1920
--EXPECT--
20-
string(18) "&auml;&ouml;&uuml;"
21+
string(0) ""

ext/standard/tests/strings/htmlentities10.phpt

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,12 @@
22
htmlentities() test 10 (default_charset / cp1252)
33
--INI--
44
output_handler=
5-
internal_encoding=pass
65
default_charset=cp1252
76
--FILE--
87
<?php
9-
print ini_get('default_charset')."\n";
10-
var_dump(htmlentities("\x82\x86\x99\x9f", ENT_QUOTES, ''));
11-
var_dump(htmlentities("\x80\xa2\xa3\xa4\xa5", ENT_QUOTES, ''));
8+
print ini_get('default_charset')."\n";
9+
var_dump(htmlentities("\x82\x86\x99\x9f", ENT_QUOTES, ''));
10+
var_dump(htmlentities("\x80\xa2\xa3\xa4\xa5", ENT_QUOTES, ''));
1211
?>
1312
--EXPECT--
1413
cp1252

ext/standard/tests/strings/htmlentities11.phpt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,11 @@
22
htmlentities() test 11 (default_charset / ISO-8859-15)
33
--INI--
44
output_handler=
5-
internal_encoding=pass
65
default_charset=ISO-8859-15
76
--FILE--
87
<?php
9-
print ini_get('default_charset')."\n";
10-
var_dump(htmlentities("\xbc\xbd\xbe", ENT_QUOTES, ''));
8+
print ini_get('default_charset')."\n";
9+
var_dump(htmlentities("\xbc\xbd\xbe", ENT_QUOTES, ''));
1110
?>
1211
--EXPECT--
1312
ISO-8859-15

ext/standard/tests/strings/htmlentities12.phpt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,11 @@
22
htmlentities() test 12 (default_charset / ISO-8859-1)
33
--INI--
44
output_handler=
5-
internal_encoding=pass
65
default_charset=ISO-8859-1
76
--FILE--
87
<?php
9-
print ini_get('default_charset')."\n";
10-
var_dump(htmlentities("\xe4\xf6\xfc", ENT_QUOTES, ''));
8+
print ini_get('default_charset')."\n";
9+
var_dump(htmlentities("\xe4\xf6\xfc", ENT_QUOTES, ''));
1110
?>
1211
--EXPECT--
1312
ISO-8859-1

ext/standard/tests/strings/htmlentities13.phpt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,12 @@
22
htmlentities() test 13 (default_charset / EUC-JP)
33
--INI--
44
output_handler=
5-
internal_encoding=pass
65
default_charset=EUC-JP
76
filter.default=unsafe_raw
87
--FILE--
98
<?php
10-
print ini_get('default_charset')."\n";
11-
var_dump(htmlentities("\xa1\xa2\xa1\xa3\xa1\xa4", ENT_QUOTES, ''));
9+
print ini_get('default_charset')."\n";
10+
var_dump(htmlentities("\xa1\xa2\xa1\xa3\xa1\xa4", ENT_QUOTES, ''));
1211
?>
1312
--EXPECTF--
1413
EUC-JP

ext/standard/tests/strings/htmlentities14.phpt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,12 @@
22
htmlentities() test 14 (default_charset / Shift_JIS)
33
--INI--
44
output_handler=
5-
internal_encoding=pass
65
default_charset=Shift_JIS
76
filter.default=unsafe_raw
87
--FILE--
98
<?php
10-
print ini_get('default_charset')."\n";
11-
var_dump(htmlentities("\x81\x41\x81\x42\x81\x43", ENT_QUOTES, ''));
9+
print ini_get('default_charset')."\n";
10+
var_dump(htmlentities("\x81\x41\x81\x42\x81\x43", ENT_QUOTES, ''));
1211
?>
1312
--EXPECTF--
1413
Shift_JIS

0 commit comments

Comments
 (0)