summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/pkcs7/pk7_smime.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/pkcs7/pk7_smime.c')
-rw-r--r--src/lib/libcrypto/pkcs7/pk7_smime.c25
1 files changed, 22 insertions, 3 deletions
diff --git a/src/lib/libcrypto/pkcs7/pk7_smime.c b/src/lib/libcrypto/pkcs7/pk7_smime.c
index 86742d0dcd..a5104f8d05 100644
--- a/src/lib/libcrypto/pkcs7/pk7_smime.c
+++ b/src/lib/libcrypto/pkcs7/pk7_smime.c
@@ -573,15 +573,34 @@ int PKCS7_decrypt(PKCS7 *p7, EVP_PKEY *pkey, X509 *cert, BIO *data, int flags)
573 return 0; 573 return 0;
574 } 574 }
575 ret = SMIME_text(bread, data); 575 ret = SMIME_text(bread, data);
576 if (ret > 0 && BIO_method_type(tmpmem) == BIO_TYPE_CIPHER)
577 {
578 if (!BIO_get_cipher_status(tmpmem))
579 ret = 0;
580 }
576 BIO_free_all(bread); 581 BIO_free_all(bread);
577 return ret; 582 return ret;
578 } else { 583 } else {
579 for(;;) { 584 for(;;) {
580 i = BIO_read(tmpmem, buf, sizeof(buf)); 585 i = BIO_read(tmpmem, buf, sizeof(buf));
581 if(i <= 0) break; 586 if(i <= 0)
582 BIO_write(data, buf, i); 587 {
588 ret = 1;
589 if (BIO_method_type(tmpmem) == BIO_TYPE_CIPHER)
590 {
591 if (!BIO_get_cipher_status(tmpmem))
592 ret = 0;
593 }
594
595 break;
596 }
597 if (BIO_write(data, buf, i) != i)
598 {
599 ret = 0;
600 break;
601 }
583 } 602 }
584 BIO_free_all(tmpmem); 603 BIO_free_all(tmpmem);
585 return 1; 604 return ret;
586 } 605 }
587} 606}