From 90ef39f43ad5bf4e85c56a79d0b56fb590b3c7f7 Mon Sep 17 00:00:00 2001 From: Richard Levitte Date: Wed, 5 Aug 2020 10:40:01 +0200 Subject: EVP: Fix the returned value for ASN1_PKEY_CTRL_DEFAULT_MD_NID Trust the returned value from EVP_PKEY_get_default_digest_name()! It mimics exactly the values that EVP_PKEY_get_default_digest_nid() is supposed to return, and that value should simply be passed unchanged. Callers depend on it. Reviewed-by: Matt Caswell (Merged from https://github.com/openssl/openssl/pull/12586) --- crypto/evp/p_lib.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/crypto/evp/p_lib.c b/crypto/evp/p_lib.c index 3e3f2118a2..2563cd97ca 100644 --- a/crypto/evp/p_lib.c +++ b/crypto/evp/p_lib.c @@ -1202,19 +1202,18 @@ static int legacy_asn1_ctrl_to_param(EVP_PKEY *pkey, int op, case ASN1_PKEY_CTRL_DEFAULT_MD_NID: { char mdname[80] = ""; - int nid; int rv = EVP_PKEY_get_default_digest_name(pkey, mdname, sizeof(mdname)); - if (rv <= 0) - return rv; - nid = OBJ_sn2nid(mdname); - if (nid == NID_undef) - nid = OBJ_ln2nid(mdname); - if (nid == NID_undef) - return 0; - *(int *)arg2 = nid; - return 1; + if (rv > 0) { + int nid; + + nid = OBJ_sn2nid(mdname); + if (nid == NID_undef) + nid = OBJ_ln2nid(mdname); + *(int *)arg2 = nid; + } + return rv; } default: return -2; -- cgit v1.2.3