diff options
author | Christoph M. Becker <cmbecker69@gmx.de> | 2020-10-12 16:28:36 +0200 |
---|---|---|
committer | Christoph M. Becker <cmbecker69@gmx.de> | 2020-10-12 16:28:52 +0200 |
commit | 216d6a024aeee19a7bd532d0ddaad2a4aff7e097 (patch) | |
tree | 8d6582eede92e0d50d1e907864807b99465893fd /ext/imap/php_imap.c | |
parent | 4a469c7e9895360a7c605fbb9ea4e062661b666f (diff) | |
parent | 73e43b6e19720112f0d10bd988d840e7537055a4 (diff) | |
download | php-git-216d6a024aeee19a7bd532d0ddaad2a4aff7e097.tar.gz |
Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
Fix #80216: imap_mail_compose() does not validate types/encodings
Diffstat (limited to 'ext/imap/php_imap.c')
-rw-r--r-- | ext/imap/php_imap.c | 27 |
1 files changed, 18 insertions, 9 deletions
diff --git a/ext/imap/php_imap.c b/ext/imap/php_imap.c index 16cacbd91f..e6775ac811 100644 --- a/ext/imap/php_imap.c +++ b/ext/imap/php_imap.c @@ -3643,10 +3643,16 @@ PHP_FUNCTION(imap_mail_compose) topbod = bod; if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(data), "type", sizeof("type") - 1)) != NULL) { - bod->type = (short) zval_get_long(pvalue); + zend_long type = zval_get_long(pvalue); + if (type >= 0 && type <= TYPEMAX && body_types[type] != NULL) { + bod->type = (short) type; + } } if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(data), "encoding", sizeof("encoding") - 1)) != NULL) { - bod->encoding = (short) zval_get_long(pvalue); + zend_long encoding = zval_get_long(pvalue); + if (encoding >= 0 && encoding <= ENCMAX && body_encodings[encoding] != NULL) { + bod->encoding = (short) encoding; + } } if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(data), "charset", sizeof("charset") - 1)) != NULL) { convert_to_string_ex(pvalue); @@ -3728,10 +3734,13 @@ PHP_FUNCTION(imap_mail_compose) bod->md5 = cpystr(Z_STRVAL_P(pvalue)); } } else if (Z_TYPE_P(data) == IS_ARRAY && topbod->type == TYPEMULTIPART) { - short type = -1; + short type = 0; SEPARATE_ARRAY(data); if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(data), "type", sizeof("type") - 1)) != NULL) { - type = (short) zval_get_long(pvalue); + zend_long tmp_type = zval_get_long(pvalue); + if (tmp_type >= 0 && tmp_type <= TYPEMAX && tmp_type != TYPEMULTIPART && body_types[tmp_type] != NULL) { + type = (short) tmp_type; + } } if (!toppart) { @@ -3744,13 +3753,13 @@ PHP_FUNCTION(imap_mail_compose) } bod = &mypart->body; - - if (type != TYPEMULTIPART) { - bod->type = type; - } + bod->type = type; if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(data), "encoding", sizeof("encoding") - 1)) != NULL) { - bod->encoding = (short) zval_get_long(pvalue); + zend_long encoding = zval_get_long(pvalue); + if (encoding >= 0 && encoding <= ENCMAX && body_encodings[encoding] != NULL) { + bod->encoding = (short) encoding; + } } if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(data), "charset", sizeof("charset") - 1)) != NULL) { convert_to_string_ex(pvalue); |