Skip to content

Commit f99c69f

Browse files
committed
Merge branch 'PHP-8.0' into PHP-8.1
* PHP-8.0: Fix #81518: Header injection via default_mimetype / default_charset
2 parents d98634e + b7f3b67 commit f99c69f

File tree

4 files changed

+44
-2
lines changed

4 files changed

+44
-2
lines changed

NEWS

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@ PHP NEWS
22
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
33
?? ??? ????, PHP 8.1.0RC5
44

5-
5+
- Core:
6+
. Fixed bug #81518 (Header injection via default_mimetype / default_charset).
7+
(cmb)
68

79
14 Oct 2021, PHP 8.1.0RC4
810

main/main.c

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -533,6 +533,10 @@ PHPAPI void (*php_internal_encoding_changed)(void) = NULL;
533533
/* {{{ PHP_INI_MH */
534534
static PHP_INI_MH(OnUpdateDefaultCharset)
535535
{
536+
if (memchr(ZSTR_VAL(new_value), '\0', ZSTR_LEN(new_value))
537+
|| strpbrk(ZSTR_VAL(new_value), "\r\n")) {
538+
return FAILURE;
539+
}
536540
OnUpdateString(entry, new_value, mh_arg1, mh_arg2, mh_arg3, stage);
537541
if (php_internal_encoding_changed) {
538542
php_internal_encoding_changed();
@@ -546,6 +550,17 @@ static PHP_INI_MH(OnUpdateDefaultCharset)
546550
}
547551
/* }}} */
548552

553+
/* {{{ PHP_INI_MH */
554+
static PHP_INI_MH(OnUpdateDefaultMimeTye)
555+
{
556+
if (memchr(ZSTR_VAL(new_value), '\0', ZSTR_LEN(new_value))
557+
|| strpbrk(ZSTR_VAL(new_value), "\r\n")) {
558+
return FAILURE;
559+
}
560+
return OnUpdateString(entry, new_value, mh_arg1, mh_arg2, mh_arg3, stage);
561+
}
562+
/* }}} */
563+
549564
/* {{{ PHP_INI_MH */
550565
static PHP_INI_MH(OnUpdateInternalEncoding)
551566
{
@@ -693,7 +708,7 @@ PHP_INI_BEGIN()
693708
STD_PHP_INI_ENTRY("auto_prepend_file", NULL, PHP_INI_SYSTEM|PHP_INI_PERDIR, OnUpdateString, auto_prepend_file, php_core_globals, core_globals)
694709
STD_PHP_INI_ENTRY("doc_root", NULL, PHP_INI_SYSTEM, OnUpdateStringUnempty, doc_root, php_core_globals, core_globals)
695710
STD_PHP_INI_ENTRY("default_charset", PHP_DEFAULT_CHARSET, PHP_INI_ALL, OnUpdateDefaultCharset, default_charset, sapi_globals_struct, sapi_globals)
696-
STD_PHP_INI_ENTRY("default_mimetype", SAPI_DEFAULT_MIMETYPE, PHP_INI_ALL, OnUpdateString, default_mimetype, sapi_globals_struct, sapi_globals)
711+
STD_PHP_INI_ENTRY("default_mimetype", SAPI_DEFAULT_MIMETYPE, PHP_INI_ALL, OnUpdateDefaultMimeTye, default_mimetype, sapi_globals_struct, sapi_globals)
697712
STD_PHP_INI_ENTRY("internal_encoding", NULL, PHP_INI_ALL, OnUpdateInternalEncoding, internal_encoding, php_core_globals, core_globals)
698713
STD_PHP_INI_ENTRY("input_encoding", NULL, PHP_INI_ALL, OnUpdateInputEncoding, input_encoding, php_core_globals, core_globals)
699714
STD_PHP_INI_ENTRY("output_encoding", NULL, PHP_INI_ALL, OnUpdateOutputEncoding, output_encoding, php_core_globals, core_globals)

sapi/cgi/tests/bug81518a.phpt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
--TEST--
2+
Bug #81518 (Header injection via default_mimetype / default_charset)
3+
--CGI--
4+
--FILE--
5+
<?php
6+
ini_set(
7+
"default_mimetype",
8+
"text/html;charset=ISO-8859-1\r\nContent-Length: 31\r\n\r\n" .
9+
"Lets smuggle a HTTP response.\r\n"
10+
);
11+
?>
12+
--EXPECTHEADERS--
13+
Content-type: text/html; charset=UTF-8
14+
--EXPECT--

sapi/cgi/tests/bug81518b.phpt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
--TEST--
2+
Bug #81518 (Header injection via default_mimetype / default_charset)
3+
--CGI--
4+
--FILE--
5+
<?php
6+
ini_set('default_charset', 'ISO-8859-1' . "\r\nHeader-Injection: Works!");
7+
header('Content-Type: text/html');
8+
?>
9+
--EXPECTHEADERS--
10+
Content-type: text/html;charset=UTF-8
11+
--EXPECT--

0 commit comments

Comments
 (0)