summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatt Caswell <matt@openssl.org>2020-03-12 10:55:51 +0000
committerMatt Caswell <matt@openssl.org>2020-03-19 11:39:39 +0000
commita2b6231601c384bba043755bb58d500265ff6f1e (patch)
treee9c7d92ec4f4c826803eb6953860f4c610bc4d91
parent8658feddea6aef5cf5cbb1cfbf6b1817fa432051 (diff)
Handle the case where there is no digest in an EVP_MD_CTX
EVP_MD_CTX_ctrl assumes that a digest has always been set. However in a non-legacy EVP_DigestSign* operation this is not the case because the digest is handled entirely by the underlying signature implementation. This fixes one of the travis failures on the master branch. [extended tests] Reviewed-by: Richard Levitte <levitte@openssl.org> Reviewed-by: Tomas Mraz <tmraz@fedoraproject.org> (Merged from https://github.com/openssl/openssl/pull/11317)
-rw-r--r--crypto/evp/digest.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/crypto/evp/digest.c b/crypto/evp/digest.c
index be6fcb58f1..040a92dc5f 100644
--- a/crypto/evp/digest.c
+++ b/crypto/evp/digest.c
@@ -657,12 +657,12 @@ int EVP_MD_CTX_ctrl(EVP_MD_CTX *ctx, int cmd, int p1, void *p2)
size_t sz;
OSSL_PARAM params[2] = { OSSL_PARAM_END, OSSL_PARAM_END };
- if (ctx == NULL || ctx->digest == NULL) {
- ERR_raise(ERR_LIB_EVP, EVP_R_MESSAGE_DIGEST_IS_NULL);
+ if (ctx == NULL) {
+ ERR_raise(ERR_LIB_EVP, ERR_R_PASSED_NULL_PARAMETER);
return 0;
}
- if (ctx->digest->prov == NULL)
+ if (ctx->digest != NULL && ctx->digest->prov == NULL)
goto legacy;
switch (cmd) {