Skip to content

Commit b7f3b67

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

File tree

4 files changed

+45
-1
lines changed

4 files changed

+45
-1
lines changed

NEWS

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@ PHP NEWS
22
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
33
?? ??? 2021, PHP 8.0.13
44

5+
- Core:
6+
. Fixed bug #81518 (Header injection via default_mimetype / default_charset).
7+
(cmb)
8+
59
- Opcache:
610
. Fixed bug #81512 (Unexpected behavior with arrays and JIT). (Dmitry)
711

main/main.c

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -538,6 +538,10 @@ PHPAPI void (*php_internal_encoding_changed)(void) = NULL;
538538
/* {{{ PHP_INI_MH */
539539
static PHP_INI_MH(OnUpdateDefaultCharset)
540540
{
541+
if (memchr(ZSTR_VAL(new_value), '\0', ZSTR_LEN(new_value))
542+
|| strpbrk(ZSTR_VAL(new_value), "\r\n")) {
543+
return FAILURE;
544+
}
541545
OnUpdateString(entry, new_value, mh_arg1, mh_arg2, mh_arg3, stage);
542546
if (php_internal_encoding_changed) {
543547
php_internal_encoding_changed();
@@ -551,6 +555,17 @@ static PHP_INI_MH(OnUpdateDefaultCharset)
551555
}
552556
/* }}} */
553557

558+
/* {{{ PHP_INI_MH */
559+
static PHP_INI_MH(OnUpdateDefaultMimeTye)
560+
{
561+
if (memchr(ZSTR_VAL(new_value), '\0', ZSTR_LEN(new_value))
562+
|| strpbrk(ZSTR_VAL(new_value), "\r\n")) {
563+
return FAILURE;
564+
}
565+
return OnUpdateString(entry, new_value, mh_arg1, mh_arg2, mh_arg3, stage);
566+
}
567+
/* }}} */
568+
554569
/* {{{ PHP_INI_MH */
555570
static PHP_INI_MH(OnUpdateInternalEncoding)
556571
{
@@ -698,7 +713,7 @@ PHP_INI_BEGIN()
698713
STD_PHP_INI_ENTRY("auto_prepend_file", NULL, PHP_INI_SYSTEM|PHP_INI_PERDIR, OnUpdateString, auto_prepend_file, php_core_globals, core_globals)
699714
STD_PHP_INI_ENTRY("doc_root", NULL, PHP_INI_SYSTEM, OnUpdateStringUnempty, doc_root, php_core_globals, core_globals)
700715
STD_PHP_INI_ENTRY("default_charset", PHP_DEFAULT_CHARSET, PHP_INI_ALL, OnUpdateDefaultCharset, default_charset, sapi_globals_struct, sapi_globals)
701-
STD_PHP_INI_ENTRY("default_mimetype", SAPI_DEFAULT_MIMETYPE, PHP_INI_ALL, OnUpdateString, default_mimetype, sapi_globals_struct, sapi_globals)
716+
STD_PHP_INI_ENTRY("default_mimetype", SAPI_DEFAULT_MIMETYPE, PHP_INI_ALL, OnUpdateDefaultMimeTye, default_mimetype, sapi_globals_struct, sapi_globals)
702717
STD_PHP_INI_ENTRY("internal_encoding", NULL, PHP_INI_ALL, OnUpdateInternalEncoding, internal_encoding, php_core_globals, core_globals)
703718
STD_PHP_INI_ENTRY("input_encoding", NULL, PHP_INI_ALL, OnUpdateInputEncoding, input_encoding, php_core_globals, core_globals)
704719
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)