aboutsummaryrefslogtreecommitdiffstats
path: root/crypto/cms/cms_smime.c
diff options
context:
space:
mode:
authorDr. Stephen Henson <steve@openssl.org>2008-03-15 13:37:32 +0000
committerDr. Stephen Henson <steve@openssl.org>2008-03-15 13:37:32 +0000
commite540d1cd77d4cf0edea74212a5e598d073ce2e67 (patch)
tree3db9a1fed983e5e11b246597b5026ed1511240d4 /crypto/cms/cms_smime.c
parentfd47c36136c7ac9b86f14c69b23a7d2df4fce132 (diff)
downloadopenssl-e540d1cd77d4cf0edea74212a5e598d073ce2e67.tar.gz
Check for cipher BIO errors and set key length after parameter decode.
Diffstat (limited to 'crypto/cms/cms_smime.c')
-rw-r--r--crypto/cms/cms_smime.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/crypto/cms/cms_smime.c b/crypto/cms/cms_smime.c
index da0fac0a24..d1a16808e9 100644
--- a/crypto/cms/cms_smime.c
+++ b/crypto/cms/cms_smime.c
@@ -77,12 +77,20 @@ static int cms_copy_content(BIO *out, BIO *in, unsigned int flags)
else
tmpout = out;
- /* Read all content through chain to determine content digests */
+ /* Read all content through chain to process digest, decrypt etc */
for (;;)
{
i=BIO_read(in,buf,sizeof(buf));
if (i <= 0)
+ {
+ if (BIO_method_type(in) == BIO_TYPE_CIPHER)
+ {
+ if (!BIO_get_cipher_status(in))
+ goto err;
+ }
break;
+ }
+
if (tmpout)
BIO_write(tmpout, buf, i);
}