Ensure that MDs created via EVP_MD_meth_new() go down the legacy route
MDs created via EVP_MD_meth_new() are inherently legacy and therefore
need to go down the legacy route when they are used.
@@ -208,7 +208,8 @@ static int evp_md_init_internal(EVP_MD_CTX *ctx, const EVP_MD *type,
|| tmpimpl != NULL
# endif
#endif
- || (ctx->flags & EVP_MD_CTX_FLAG_NO_INIT) != 0) {
+ || (ctx->flags & EVP_MD_CTX_FLAG_NO_INIT) != 0
+ || type->origin == EVP_ORIG_METH) {
if (ctx->digest == ctx->fetched_digest)
ctx->digest = NULL;
EVP_MD_free(ctx->fetched_digest);
