From: Shane Lontis Date: Tue, 11 Aug 2020 07:31:11 +0000 (+1000) Subject: Fix coverity CID #1452773 - Dereference before NULL check in EVP_DigestFinal_ex() X-Git-Tag: openssl-3.0.0-alpha7~496 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4bec3f6d5103c8244aa50d5d5a5b0374c91e7dfb;p=thirdparty%2Fopenssl.git Fix coverity CID #1452773 - Dereference before NULL check in EVP_DigestFinal_ex() Reviewed-by: Tomas Mraz (Merged from https://github.com/openssl/openssl/pull/12628) --- diff --git a/crypto/evp/digest.c b/crypto/evp/digest.c index f5ec573828a..f9ba59ca635 100644 --- a/crypto/evp/digest.c +++ b/crypto/evp/digest.c @@ -367,11 +367,18 @@ int EVP_DigestFinal(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *size) /* The caller can assume that this removes any secret data from the context */ int EVP_DigestFinal_ex(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *isize) { - int ret; + int ret, sz; size_t size = 0; - size_t mdsize = EVP_MD_size(ctx->digest); + size_t mdsize = 0; - if (ctx->digest == NULL || ctx->digest->prov == NULL) + if (ctx->digest == NULL) + return 0; + + sz = EVP_MD_size(ctx->digest); + if (sz < 0) + return 0; + mdsize = sz; + if (ctx->digest->prov == NULL) goto legacy; if (ctx->digest->dfinal == NULL) {