Detect symmetric crypto errors in PKCS7_decrypt.

Thanks to Ivan Nestlerode <inestlerode@us.ibm.com> for reporting this bug.
This commit is contained in:
Dr. Stephen Henson 2012-02-27 15:22:41 +00:00
parent f7ef20c5ee
commit d16bb406d4

View File

@ -573,15 +573,30 @@ int PKCS7_decrypt(PKCS7 *p7, EVP_PKEY *pkey, X509 *cert, BIO *data, int flags)
return 0; return 0;
} }
ret = SMIME_text(bread, data); 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); BIO_free_all(bread);
return ret; return ret;
} else { } else {
for(;;) { for(;;) {
i = BIO_read(tmpmem, buf, sizeof(buf)); i = BIO_read(tmpmem, buf, sizeof(buf));
if(i <= 0) break; if(i <= 0)
{
ret = 1;
if (BIO_method_type(tmpmem) == BIO_TYPE_CIPHER)
{
if (!BIO_get_cipher_status(tmpmem))
ret = 0;
}
break;
}
BIO_write(data, buf, i); BIO_write(data, buf, i);
} }
BIO_free_all(tmpmem); BIO_free_all(tmpmem);
return 1; return ret;
} }
} }