Skip to content

Commit e67814f

Browse files
committed
Merge branch 'PHP-8.0' into master
* PHP-8.0: Fix #80213: imap_mail_compose() segfaults on certain $bodies
2 parents 49783e3 + 7d085c8 commit e67814f

File tree

2 files changed

+25
-0
lines changed

2 files changed

+25
-0
lines changed

ext/imap/php_imap.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3195,6 +3195,7 @@ PHP_FUNCTION(imap_mail_compose)
31953195
if(Z_TYPE_P(pvalue) == IS_ARRAY) {
31963196
disp_param = tmp_param = NULL;
31973197
ZEND_HASH_FOREACH_STR_KEY_VAL(Z_ARRVAL_P(pvalue), key, disp_data) {
3198+
if (key == NULL) continue;
31983199
disp_param = mail_newbody_parameter();
31993200
disp_param->attribute = cpystr(ZSTR_VAL(key));
32003201
convert_to_string_ex(disp_data);
@@ -3227,6 +3228,7 @@ PHP_FUNCTION(imap_mail_compose)
32273228
if (Z_TYPE_P(pvalue) == IS_ARRAY) {
32283229
disp_param = tmp_param = NULL;
32293230
ZEND_HASH_FOREACH_STR_KEY_VAL(Z_ARRVAL_P(pvalue), key, disp_data) {
3231+
if (key == NULL) continue;
32303232
disp_param = mail_newbody_parameter();
32313233
disp_param->attribute = cpystr(ZSTR_VAL(key));
32323234
convert_to_string_ex(disp_data);
@@ -3295,6 +3297,7 @@ PHP_FUNCTION(imap_mail_compose)
32953297
if (Z_TYPE_P(pvalue) == IS_ARRAY) {
32963298
disp_param = tmp_param = NULL;
32973299
ZEND_HASH_FOREACH_STR_KEY_VAL(Z_ARRVAL_P(pvalue), key, disp_data) {
3300+
if (key == NULL) continue;
32983301
disp_param = mail_newbody_parameter();
32993302
disp_param->attribute = cpystr(ZSTR_VAL(key));
33003303
convert_to_string_ex(disp_data);
@@ -3327,6 +3330,7 @@ PHP_FUNCTION(imap_mail_compose)
33273330
if (Z_TYPE_P(pvalue) == IS_ARRAY) {
33283331
disp_param = tmp_param = NULL;
33293332
ZEND_HASH_FOREACH_STR_KEY_VAL(Z_ARRVAL_P(pvalue), key, disp_data) {
3333+
if (key == NULL) continue;
33303334
disp_param = mail_newbody_parameter();
33313335
disp_param->attribute = cpystr(ZSTR_VAL(key));
33323336
convert_to_string_ex(disp_data);

ext/imap/tests/bug80213.phpt

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
--TEST--
2+
Bug #80213 (imap_mail_compose() segfaults on certain $bodies)
3+
--SKIPIF--
4+
<?php
5+
if (!extension_loaded('imap')) die('skip imap extension not available');
6+
?>
7+
--FILE--
8+
<?php
9+
$envelope = [];
10+
$body = [[
11+
'type.parameters' => ['param'],
12+
'disposition' => ['disp'],
13+
], [
14+
'type.parameters' => ['param'],
15+
'disposition' => ['disp'],
16+
]];
17+
imap_mail_compose($envelope, $body);
18+
echo "done\n";
19+
?>
20+
--EXPECT--
21+
done

0 commit comments

Comments
 (0)