From: Tomas Mraz Date: Tue, 23 Nov 2021 14:52:04 +0000 (+0100) Subject: EVP_MD_CTX_copy_ex: Allow copying uninitialized digest contexts X-Git-Tag: openssl-3.2.0-alpha1~3291 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=9ece8323ea2230092227bf20e5d93012d15d92e9;p=thirdparty%2Fopenssl.git EVP_MD_CTX_copy_ex: Allow copying uninitialized digest contexts Fixes #17117 Reviewed-by: Matt Caswell Reviewed-by: Paul Dale (Merged from https://github.com/openssl/openssl/pull/17118) --- diff --git a/crypto/evp/digest.c b/crypto/evp/digest.c index 0a133c5c15a..7ebb2e32352 100644 --- a/crypto/evp/digest.c +++ b/crypto/evp/digest.c @@ -510,11 +510,20 @@ int EVP_MD_CTX_copy_ex(EVP_MD_CTX *out, const EVP_MD_CTX *in) { unsigned char *tmp_buf; - if (in == NULL || in->digest == NULL) { - ERR_raise(ERR_LIB_EVP, EVP_R_INPUT_NOT_INITIALIZED); + if (in == NULL) { + ERR_raise(ERR_LIB_EVP, ERR_R_PASSED_NULL_PARAMETER); return 0; } + if (in->digest == NULL) { + /* copying uninitialized digest context */ + EVP_MD_CTX_reset(out); + if (out->fetched_digest != NULL) + EVP_MD_free(out->fetched_digest); + *out = *in; + return 1; + } + if (in->digest->prov == NULL || (in->flags & EVP_MD_CTX_FLAG_NO_INIT) != 0) goto legacy;