only cleanup ctx if we need to, save ctx flags when we do

This commit is contained in:
Dr. Stephen Henson 2012-02-10 16:54:56 +00:00
parent c944a9696e
commit 8705846710

View File

@ -125,10 +125,14 @@ int EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, ENGINE *imp
/* Ensure a context left lying around from last time is cleared /* Ensure a context left lying around from last time is cleared
* (the previous check attempted to avoid this if the same * (the previous check attempted to avoid this if the same
* ENGINE and EVP_CIPHER could be used). */ * ENGINE and EVP_CIPHER could be used). */
EVP_CIPHER_CTX_cleanup(ctx); if (ctx->cipher)
{
/* Restore encrypt field: it is zeroed by cleanup */ unsigned long flags = ctx->flags;
ctx->encrypt = enc; EVP_CIPHER_CTX_cleanup(ctx);
/* Restore encrypt and flags */
ctx->encrypt = enc;
ctx->flags = flags;
}
#ifndef OPENSSL_NO_ENGINE #ifndef OPENSSL_NO_ENGINE
if(impl) if(impl)
{ {