summaryrefslogtreecommitdiff
path: root/Cryptlib/OpenSSL/crypto/pkcs7/pk7_smime.c
diff options
context:
space:
mode:
authorMatthew Garrett <mjg@redhat.com>2012-07-02 12:33:42 -0400
committerMatthew Garrett <mjg@redhat.com>2012-07-02 12:33:42 -0400
commitd259b1406044b430fe5786cd57e272bb9c57166d (patch)
tree308e31c8b7338e11843ac324ce20b89d765c3f45 /Cryptlib/OpenSSL/crypto/pkcs7/pk7_smime.c
parent20094cb55d476c5d053cc73cec6e0d3f2a1c8d9a (diff)
downloadefi-boot-shim-d259b1406044b430fe5786cd57e272bb9c57166d.tar.gz
efi-boot-shim-d259b1406044b430fe5786cd57e272bb9c57166d.zip
Update OpenSSL
Diffstat (limited to 'Cryptlib/OpenSSL/crypto/pkcs7/pk7_smime.c')
-rwxr-xr-xCryptlib/OpenSSL/crypto/pkcs7/pk7_smime.c25
1 files changed, 22 insertions, 3 deletions
diff --git a/Cryptlib/OpenSSL/crypto/pkcs7/pk7_smime.c b/Cryptlib/OpenSSL/crypto/pkcs7/pk7_smime.c
index 69ba484c..d6db27c6 100755
--- a/Cryptlib/OpenSSL/crypto/pkcs7/pk7_smime.c
+++ b/Cryptlib/OpenSSL/crypto/pkcs7/pk7_smime.c
@@ -489,15 +489,34 @@ int PKCS7_decrypt(PKCS7 *p7, EVP_PKEY *pkey, X509 *cert, BIO *data, int flags)
return 0;
}
ret = SMIME_text(bread, data);
+ if (ret > 0 && BIO_method_type(tmpmem) == BIO_TYPE_CIPHER)
+ {
+ if (!BIO_get_cipher_status(tmpmem))
+ ret = 0;
+ }
BIO_free_all(bread);
return ret;
} else {
for(;;) {
i = BIO_read(tmpmem, buf, sizeof(buf));
- if(i <= 0) break;
- BIO_write(data, buf, i);
+ if(i <= 0)
+ {
+ ret = 1;
+ if (BIO_method_type(tmpmem) == BIO_TYPE_CIPHER)
+ {
+ if (!BIO_get_cipher_status(tmpmem))
+ ret = 0;
+ }
+
+ break;
+ }
+ if (BIO_write(data, buf, i) != i)
+ {
+ ret = 0;
+ break;
+ }
}
BIO_free_all(tmpmem);
- return 1;
+ return ret;
}
}