diff options
author | Dr. Stephen Henson <steve@openssl.org> | 2016-06-18 15:46:13 +0100 |
---|---|---|
committer | Dr. Stephen Henson <steve@openssl.org> | 2016-07-15 14:09:05 +0100 |
commit | d166ed8c11e10e9fdaeac182effb9dd318843924 (patch) | |
tree | fd47ffb1f5d42b121b04d14c1a8f6bdc659637f6 /apps/ts.c | |
parent | 1fc431ba57d12189a9bdacd3999ea2a7b91458d8 (diff) |
check return values for EVP_Digest*() APIs
Reviewed-by: Richard Levitte <levitte@openssl.org>
Diffstat (limited to 'apps/ts.c')
-rw-r--r-- | apps/ts.c | 23 |
1 files changed, 14 insertions, 9 deletions
@@ -492,28 +492,30 @@ static int create_digest(BIO *input, char *digest, const EVP_MD *md, unsigned char **md_value) { int md_value_len; + int rv = 0; + EVP_MD_CTX *md_ctx = NULL; md_value_len = EVP_MD_size(md); if (md_value_len < 0) return 0; if (input) { - EVP_MD_CTX *md_ctx = EVP_MD_CTX_new(); unsigned char buffer[4096]; int length; + md_ctx = EVP_MD_CTX_new(); if (md_ctx == NULL) return 0; *md_value = app_malloc(md_value_len, "digest buffer"); - EVP_DigestInit(md_ctx, md); + if (!EVP_DigestInit(md_ctx, md)) + goto err; while ((length = BIO_read(input, buffer, sizeof(buffer))) > 0) { - EVP_DigestUpdate(md_ctx, buffer, length); - } - if (!EVP_DigestFinal(md_ctx, *md_value, NULL)) { - EVP_MD_CTX_free(md_ctx); - return 0; + if (!EVP_DigestUpdate(md_ctx, buffer, length)) + goto err; } - EVP_MD_CTX_free(md_ctx); + if (!EVP_DigestFinal(md_ctx, *md_value, NULL)) + goto err; + md_value_len = EVP_MD_size(md); } else { long digest_len; *md_value = OPENSSL_hexstr2buf(digest, &digest_len); @@ -525,7 +527,10 @@ static int create_digest(BIO *input, char *digest, const EVP_MD *md, return 0; } } - return md_value_len; + rv = md_value_len; + err: + EVP_MD_CTX_free(md_ctx); + return rv; } static ASN1_INTEGER *create_nonce(int bits) |