Fix zero-length content verification in S/MIME format
authorDmitry Belyavskiy <beldmit@gmail.com>
Wed, 7 Oct 2020 10:23:01 +0000 (13:23 +0300)
committerDmitry Belyavskiy <beldmit@gmail.com>
Thu, 8 Oct 2020 15:17:44 +0000 (18:17 +0300)
Fixes #13082

Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/13087)

crypto/cms/cms_smime.c
crypto/pkcs7/pk7_smime.c

index f9a851950fa4f14bbed68128cbe08cd1d7e7f00a..c8bec75cdd25a8678c4f70314ce63e83f2292a16 100644 (file)
@@ -401,7 +401,7 @@ int CMS_verify(CMS_ContentInfo *cms, STACK_OF(X509) *certs,
         long len;
 
         len = BIO_get_mem_data(dcont, &ptr);
-        tmpin = BIO_new_mem_buf(ptr, len);
+        tmpin = (len == 0) ? dcont : BIO_new_mem_buf(ptr, len);
         if (tmpin == NULL) {
             CMSerr(CMS_F_CMS_VERIFY, ERR_R_MALLOC_FAILURE);
             goto err2;
index 5cbc18c63ebc5572f233eb090cd4c06c668383c8..e9ae4f3394c859a79ff1ae3cd11ba4129386339b 100644 (file)
@@ -311,7 +311,7 @@ int PKCS7_verify(PKCS7 *p7, STACK_OF(X509) *certs, X509_STORE *store,
         char *ptr;
         long len;
         len = BIO_get_mem_data(indata, &ptr);
-        tmpin = BIO_new_mem_buf(ptr, len);
+        tmpin = (len == 0) ? indata : BIO_new_mem_buf(ptr, len);
         if (tmpin == NULL) {
             PKCS7err(0, ERR_R_MALLOC_FAILURE);
             goto err;