summaryrefslogtreecommitdiff
path: root/ext/imap/php_imap.c
diff options
context:
space:
mode:
authorChristoph M. Becker <cmbecker69@gmx.de>2020-10-10 23:28:04 +0200
committerChristoph M. Becker <cmbecker69@gmx.de>2020-10-10 23:28:19 +0200
commit6494e578045f076f2d8a704951e9b7545a06de7d (patch)
tree7bc3856ea5d7be273ac7f05414acab8889bfd3ac /ext/imap/php_imap.c
parent7d085c87acb8ee2579cc27e8e51310741cb56c55 (diff)
parent7940fb42ce90173e285278b577e46cbab9b270a3 (diff)
downloadphp-git-6494e578045f076f2d8a704951e9b7545a06de7d.tar.gz
Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4: Fix #80215: imap_mail_compose() may modify by-val parameters
Diffstat (limited to 'ext/imap/php_imap.c')
-rw-r--r--ext/imap/php_imap.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/ext/imap/php_imap.c b/ext/imap/php_imap.c
index 13c7bef42a..e3a90f525f 100644
--- a/ext/imap/php_imap.c
+++ b/ext/imap/php_imap.c
@@ -3093,7 +3093,7 @@ PHP_FUNCTION(imap_mail_compose)
int toppart = 0;
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();
}
@@ -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 (Z_TYPE_P(pvalue) == IS_ARRAY) {
custom_headers_param = tmp_param = NULL;
+ SEPARATE_ARRAY(pvalue);
ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(pvalue), env_data) {
custom_headers_param = mail_newbody_parameter();
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");
RETURN_FALSE;
}
+ SEPARATE_ARRAY(data);
bod = mail_newbody();
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(Z_TYPE_P(pvalue) == IS_ARRAY) {
disp_param = tmp_param = NULL;
+ SEPARATE_ARRAY(pvalue);
ZEND_HASH_FOREACH_STR_KEY_VAL(Z_ARRVAL_P(pvalue), key, disp_data) {
if (key == NULL) continue;
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 (Z_TYPE_P(pvalue) == IS_ARRAY) {
disp_param = tmp_param = NULL;
+ SEPARATE_ARRAY(pvalue);
ZEND_HASH_FOREACH_STR_KEY_VAL(Z_ARRVAL_P(pvalue), key, disp_data) {
if (key == NULL) continue;
disp_param = mail_newbody_parameter();
@@ -3262,6 +3266,7 @@ PHP_FUNCTION(imap_mail_compose)
}
} else if (Z_TYPE_P(data) == IS_ARRAY) {
short type = -1;
+ SEPARATE_ARRAY(data);
if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(data), "type", sizeof("type") - 1)) != NULL) {
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 (Z_TYPE_P(pvalue) == IS_ARRAY) {
disp_param = tmp_param = NULL;
+ SEPARATE_ARRAY(pvalue);
ZEND_HASH_FOREACH_STR_KEY_VAL(Z_ARRVAL_P(pvalue), key, disp_data) {
if (key == NULL) continue;
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 (Z_TYPE_P(pvalue) == IS_ARRAY) {
disp_param = tmp_param = NULL;
+ SEPARATE_ARRAY(pvalue);
ZEND_HASH_FOREACH_STR_KEY_VAL(Z_ARRVAL_P(pvalue), key, disp_data) {
if (key == NULL) continue;
disp_param = mail_newbody_parameter();