diff options
author | Christoph M. Becker <cmbecker69@gmx.de> | 2020-10-20 13:36:17 +0200 |
---|---|---|
committer | Christoph M. Becker <cmbecker69@gmx.de> | 2020-10-20 13:36:41 +0200 |
commit | 486c49dee80440e3aeafc90733c3afe6a19abaed (patch) | |
tree | c83400c2d191994e339a23fa53b0a150aa4a48d2 | |
parent | cf0470793844190d1968d55d741a8de8e893ebd5 (diff) | |
parent | 9cfd650697148e7a87a96f34e268b3f24e3df965 (diff) | |
download | php-git-486c49dee80440e3aeafc90733c3afe6a19abaed.tar.gz |
Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
Properly fix #80220
-rw-r--r-- | NEWS | 1 | ||||
-rw-r--r-- | ext/imap/php_imap.c | 22 | ||||
-rw-r--r-- | ext/imap/tests/bug80220.phpt | 34 |
3 files changed, 48 insertions, 9 deletions
@@ -8,6 +8,7 @@ PHP NEWS - IMAP: . Fixed bug #80239 (imap_rfc822_write_address() leaks memory). (cmb) + . Fixed minor regression caused by fixing bug #80220. (cmb) - Opcache: . Fixed bug #80255 (Opcache bug (bad condition result) in 8.0.0rc1). (Nikita) diff --git a/ext/imap/php_imap.c b/ext/imap/php_imap.c index 18502b9fd9..2547a3a4b8 100644 --- a/ext/imap/php_imap.c +++ b/ext/imap/php_imap.c @@ -3263,15 +3263,19 @@ PHP_FUNCTION(imap_mail_compose) bod->disposition.parameter = disp_param; } } - if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(data), "contents.data", sizeof("contents.data") - 1)) != NULL) { - convert_to_string_ex(pvalue); - bod->contents.text.data = fs_get(Z_STRLEN_P(pvalue) + 1); - memcpy(bod->contents.text.data, Z_STRVAL_P(pvalue), Z_STRLEN_P(pvalue)+1); - bod->contents.text.size = Z_STRLEN_P(pvalue); + if (bod->type == TYPEMESSAGE && bod->subtype && !strcmp(bod->subtype, "RFC822")) { + bod->nested.msg = mail_newmsg(); } else { - bod->contents.text.data = fs_get(1); - memcpy(bod->contents.text.data, "", 1); - bod->contents.text.size = 0; + if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(data), "contents.data", sizeof("contents.data") - 1)) != NULL) { + convert_to_string_ex(pvalue); + bod->contents.text.data = fs_get(Z_STRLEN_P(pvalue) + 1); + memcpy(bod->contents.text.data, Z_STRVAL_P(pvalue), Z_STRLEN_P(pvalue)+1); + bod->contents.text.size = Z_STRLEN_P(pvalue); + } else { + bod->contents.text.data = fs_get(1); + memcpy(bod->contents.text.data, "", 1); + bod->contents.text.size = 0; + } } if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(data), "lines", sizeof("lines") - 1)) != NULL) { bod->size.lines = zval_get_long(pvalue); @@ -3491,7 +3495,7 @@ PHP_FUNCTION(imap_mail_compose) efree(mystring); mystring=tempstring; } else if (bod) { - spprintf(&tempstring, 0, "%s%s%s", mystring, bod->contents.text.data, CRLF); + spprintf(&tempstring, 0, "%s%s%s", mystring, bod->contents.text.data ? bod->contents.text.data : "", CRLF); efree(mystring); mystring=tempstring; } else { diff --git a/ext/imap/tests/bug80220.phpt b/ext/imap/tests/bug80220.phpt new file mode 100644 index 0000000000..0d3e3eda9b --- /dev/null +++ b/ext/imap/tests/bug80220.phpt @@ -0,0 +1,34 @@ +--TEST-- +Bug #80220 (imap_mail_compose() may leak memory) - message/rfc822 regression +--SKIPIF-- +<?php +if (!extension_loaded('imap')) die('skip imap extension not available'); +?> +--FILE-- +<?php +$bodies = [[ + 'type' => TYPEMESSAGE, + 'subtype' => 'RFC822', +], [ + 'contents.data' => 'asd', +]]; +var_dump(imap_mail_compose([], $bodies)); + +$bodies = [[ + 'type' => TYPEMESSAGE, +], [ + 'contents.data' => 'asd', +]]; +var_dump(imap_mail_compose([], $bodies)); +?> +--EXPECT-- +string(53) "MIME-Version: 1.0 +Content-Type: MESSAGE/RFC822 + + +" +string(53) "MIME-Version: 1.0 +Content-Type: MESSAGE/RFC822 + + +" |