summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--crypto/evp/digest.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/crypto/evp/digest.c b/crypto/evp/digest.c
index 5c5b118486..1457a00118 100644
--- a/crypto/evp/digest.c
+++ b/crypto/evp/digest.c
@@ -84,7 +84,8 @@ int EVP_DigestInit(EVP_MD_CTX *ctx, const EVP_MD *type)
{
if(ctx->digest != type)
{
- OPENSSL_free(ctx->md_data);
+ if(ctx->md_data != NULL)
+ OPENSSL_free(ctx->md_data);
ctx->digest=type;
#ifdef CRYPTO_MDEBUG
ctx->md_data=CRYPTO_malloc(type->ctx_size,file,line);
@@ -155,9 +156,10 @@ int EVP_MD_CTX_cleanup(EVP_MD_CTX *ctx)
* because sometimes only copies of the context are ever finalised.
*/
if(ctx->md_data)
- memset(ctx->md_data,0,ctx->digest->ctx_size);
-
- OPENSSL_free(ctx->md_data);
+ {
+ memset(ctx->md_data,0,ctx->digest->ctx_size);
+ OPENSSL_free(ctx->md_data);
+ }
memset(ctx,'\0',sizeof *ctx);
return 1;