mirror of
https://github.com/php/php-src.git
synced 2025-08-16 22:18:50 +02:00
Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4: Fix #80215: imap_mail_compose() may modify by-val parameters
This commit is contained in:
commit
6494e57804
3 changed files with 78 additions and 1 deletions
1
NEWS
1
NEWS
|
@ -8,6 +8,7 @@ PHP NEWS
|
||||||
|
|
||||||
- IMAP:
|
- IMAP:
|
||||||
. Fixed bug #80213 (imap_mail_compose() segfaults on certain $bodies). (cmb)
|
. Fixed bug #80213 (imap_mail_compose() segfaults on certain $bodies). (cmb)
|
||||||
|
. Fixed bug #80215 (imap_mail_compose() may modify by-val parameters). (cmb)
|
||||||
|
|
||||||
- Opcache:
|
- Opcache:
|
||||||
. Fixed bug #80184 (Complex expression in while / if statements resolves to
|
. Fixed bug #80184 (Complex expression in while / if statements resolves to
|
||||||
|
|
|
@ -3093,7 +3093,7 @@ PHP_FUNCTION(imap_mail_compose)
|
||||||
int toppart = 0;
|
int toppart = 0;
|
||||||
int first;
|
int first;
|
||||||
|
|
||||||
if (zend_parse_parameters(ZEND_NUM_ARGS(), "aa", &envelope, &body) == FAILURE) {
|
if (zend_parse_parameters(ZEND_NUM_ARGS(), "a/a/", &envelope, &body) == FAILURE) {
|
||||||
RETURN_THROWS();
|
RETURN_THROWS();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3151,6 +3151,7 @@ PHP_FUNCTION(imap_mail_compose)
|
||||||
if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(envelope), "custom_headers", sizeof("custom_headers") - 1)) != NULL) {
|
if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(envelope), "custom_headers", sizeof("custom_headers") - 1)) != NULL) {
|
||||||
if (Z_TYPE_P(pvalue) == IS_ARRAY) {
|
if (Z_TYPE_P(pvalue) == IS_ARRAY) {
|
||||||
custom_headers_param = tmp_param = NULL;
|
custom_headers_param = tmp_param = NULL;
|
||||||
|
SEPARATE_ARRAY(pvalue);
|
||||||
ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(pvalue), env_data) {
|
ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(pvalue), env_data) {
|
||||||
custom_headers_param = mail_newbody_parameter();
|
custom_headers_param = mail_newbody_parameter();
|
||||||
convert_to_string_ex(env_data);
|
convert_to_string_ex(env_data);
|
||||||
|
@ -3173,6 +3174,7 @@ PHP_FUNCTION(imap_mail_compose)
|
||||||
php_error_docref(NULL, E_WARNING, "body parameter must be a non-empty array");
|
php_error_docref(NULL, E_WARNING, "body parameter must be a non-empty array");
|
||||||
RETURN_FALSE;
|
RETURN_FALSE;
|
||||||
}
|
}
|
||||||
|
SEPARATE_ARRAY(data);
|
||||||
|
|
||||||
bod = mail_newbody();
|
bod = mail_newbody();
|
||||||
topbod = bod;
|
topbod = bod;
|
||||||
|
@ -3194,6 +3196,7 @@ PHP_FUNCTION(imap_mail_compose)
|
||||||
if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(data), "type.parameters", sizeof("type.parameters") - 1)) != NULL) {
|
if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(data), "type.parameters", sizeof("type.parameters") - 1)) != NULL) {
|
||||||
if(Z_TYPE_P(pvalue) == IS_ARRAY) {
|
if(Z_TYPE_P(pvalue) == IS_ARRAY) {
|
||||||
disp_param = tmp_param = NULL;
|
disp_param = tmp_param = NULL;
|
||||||
|
SEPARATE_ARRAY(pvalue);
|
||||||
ZEND_HASH_FOREACH_STR_KEY_VAL(Z_ARRVAL_P(pvalue), key, disp_data) {
|
ZEND_HASH_FOREACH_STR_KEY_VAL(Z_ARRVAL_P(pvalue), key, disp_data) {
|
||||||
if (key == NULL) continue;
|
if (key == NULL) continue;
|
||||||
disp_param = mail_newbody_parameter();
|
disp_param = mail_newbody_parameter();
|
||||||
|
@ -3227,6 +3230,7 @@ PHP_FUNCTION(imap_mail_compose)
|
||||||
if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(data), "disposition", sizeof("disposition") - 1)) != NULL) {
|
if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(data), "disposition", sizeof("disposition") - 1)) != NULL) {
|
||||||
if (Z_TYPE_P(pvalue) == IS_ARRAY) {
|
if (Z_TYPE_P(pvalue) == IS_ARRAY) {
|
||||||
disp_param = tmp_param = NULL;
|
disp_param = tmp_param = NULL;
|
||||||
|
SEPARATE_ARRAY(pvalue);
|
||||||
ZEND_HASH_FOREACH_STR_KEY_VAL(Z_ARRVAL_P(pvalue), key, disp_data) {
|
ZEND_HASH_FOREACH_STR_KEY_VAL(Z_ARRVAL_P(pvalue), key, disp_data) {
|
||||||
if (key == NULL) continue;
|
if (key == NULL) continue;
|
||||||
disp_param = mail_newbody_parameter();
|
disp_param = mail_newbody_parameter();
|
||||||
|
@ -3262,6 +3266,7 @@ PHP_FUNCTION(imap_mail_compose)
|
||||||
}
|
}
|
||||||
} else if (Z_TYPE_P(data) == IS_ARRAY) {
|
} else if (Z_TYPE_P(data) == IS_ARRAY) {
|
||||||
short type = -1;
|
short type = -1;
|
||||||
|
SEPARATE_ARRAY(data);
|
||||||
if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(data), "type", sizeof("type") - 1)) != NULL) {
|
if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(data), "type", sizeof("type") - 1)) != NULL) {
|
||||||
type = (short) zval_get_long(pvalue);
|
type = (short) zval_get_long(pvalue);
|
||||||
}
|
}
|
||||||
|
@ -3296,6 +3301,7 @@ PHP_FUNCTION(imap_mail_compose)
|
||||||
if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(data), "type.parameters", sizeof("type.parameters") - 1)) != NULL) {
|
if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(data), "type.parameters", sizeof("type.parameters") - 1)) != NULL) {
|
||||||
if (Z_TYPE_P(pvalue) == IS_ARRAY) {
|
if (Z_TYPE_P(pvalue) == IS_ARRAY) {
|
||||||
disp_param = tmp_param = NULL;
|
disp_param = tmp_param = NULL;
|
||||||
|
SEPARATE_ARRAY(pvalue);
|
||||||
ZEND_HASH_FOREACH_STR_KEY_VAL(Z_ARRVAL_P(pvalue), key, disp_data) {
|
ZEND_HASH_FOREACH_STR_KEY_VAL(Z_ARRVAL_P(pvalue), key, disp_data) {
|
||||||
if (key == NULL) continue;
|
if (key == NULL) continue;
|
||||||
disp_param = mail_newbody_parameter();
|
disp_param = mail_newbody_parameter();
|
||||||
|
@ -3329,6 +3335,7 @@ PHP_FUNCTION(imap_mail_compose)
|
||||||
if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(data), "disposition", sizeof("disposition") - 1)) != NULL) {
|
if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(data), "disposition", sizeof("disposition") - 1)) != NULL) {
|
||||||
if (Z_TYPE_P(pvalue) == IS_ARRAY) {
|
if (Z_TYPE_P(pvalue) == IS_ARRAY) {
|
||||||
disp_param = tmp_param = NULL;
|
disp_param = tmp_param = NULL;
|
||||||
|
SEPARATE_ARRAY(pvalue);
|
||||||
ZEND_HASH_FOREACH_STR_KEY_VAL(Z_ARRVAL_P(pvalue), key, disp_data) {
|
ZEND_HASH_FOREACH_STR_KEY_VAL(Z_ARRVAL_P(pvalue), key, disp_data) {
|
||||||
if (key == NULL) continue;
|
if (key == NULL) continue;
|
||||||
disp_param = mail_newbody_parameter();
|
disp_param = mail_newbody_parameter();
|
||||||
|
|
69
ext/imap/tests/bug80215.phpt
Normal file
69
ext/imap/tests/bug80215.phpt
Normal file
|
@ -0,0 +1,69 @@
|
||||||
|
--TEST--
|
||||||
|
Bug #80215 (imap_mail_compose() may modify by-val parameters)
|
||||||
|
--SKIPIF--
|
||||||
|
<?php
|
||||||
|
if (!extension_loaded('imap')) die('skip imap extension not available');
|
||||||
|
?>
|
||||||
|
--FILE--
|
||||||
|
<?php
|
||||||
|
$envelope = [
|
||||||
|
"from" => 1,
|
||||||
|
"to" => 2,
|
||||||
|
"custom_headers" => [3],
|
||||||
|
];
|
||||||
|
$body = [[
|
||||||
|
"contents.data" => 4,
|
||||||
|
"type.parameters" => ['foo' => 5],
|
||||||
|
"disposition" => ['bar' => 6],
|
||||||
|
], [
|
||||||
|
"contents.data" => 7,
|
||||||
|
"type.parameters" => ['foo' => 8],
|
||||||
|
"disposition" => ['bar' => 9],
|
||||||
|
]];
|
||||||
|
imap_mail_compose($envelope, $body);
|
||||||
|
var_dump($envelope, $body);
|
||||||
|
?>
|
||||||
|
--EXPECT--
|
||||||
|
array(3) {
|
||||||
|
["from"]=>
|
||||||
|
int(1)
|
||||||
|
["to"]=>
|
||||||
|
int(2)
|
||||||
|
["custom_headers"]=>
|
||||||
|
array(1) {
|
||||||
|
[0]=>
|
||||||
|
int(3)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
array(2) {
|
||||||
|
[0]=>
|
||||||
|
array(3) {
|
||||||
|
["contents.data"]=>
|
||||||
|
int(4)
|
||||||
|
["type.parameters"]=>
|
||||||
|
array(1) {
|
||||||
|
["foo"]=>
|
||||||
|
int(5)
|
||||||
|
}
|
||||||
|
["disposition"]=>
|
||||||
|
array(1) {
|
||||||
|
["bar"]=>
|
||||||
|
int(6)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
[1]=>
|
||||||
|
array(3) {
|
||||||
|
["contents.data"]=>
|
||||||
|
int(7)
|
||||||
|
["type.parameters"]=>
|
||||||
|
array(1) {
|
||||||
|
["foo"]=>
|
||||||
|
int(8)
|
||||||
|
}
|
||||||
|
["disposition"]=>
|
||||||
|
array(1) {
|
||||||
|
["bar"]=>
|
||||||
|
int(9)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue