summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJiasheng Jiang <jiasheng@purdue.edu>2024-03-16 21:27:14 +0000
committerTomas Mraz <tomas@openssl.org>2024-04-09 20:37:20 +0200
commitbde5d6f37bac3fb52156a7b2ac6104841bcc8cc0 (patch)
treea7938f378a9d0e9eb1449d3bd417bc20ebf950ff
parentc91d55d4c54cc15df8458df33e33a3e7067b0d65 (diff)
APPS: Add missing OPENSSL_free() and combine the error handler
Add the OPENSSL_free() in the error handler to release the "*md_value" allocated by app_malloc(). To make the code clear and avoid possible future errors, combine the error handler in the "err" tag. Then, we only need to use "goto err" instead of releasing the memory separately. Since the EVP_MD_get_size() may return negative numbers when an error occurs, create_query() may fail to catch the error since it only considers 0 as an error code. Therefore, unifying the error codes of create_digest() from non-positive numbers to 0 is better, which also benefits future programming. Fixes: c7235be ("RFC 3161 compliant time stamp request creation, response generation and response verification.") Signed-off-by: Jiasheng Jiang <jiasheng@purdue.edu> Reviewed-by: Neil Horman <nhorman@openssl.org> Reviewed-by: Shane Lontis <shane.lontis@oracle.com> (Merged from https://github.com/openssl/openssl/pull/23873) (cherry picked from commit beb82177ddcd4b536544ceec92bb53f4d85d8e91)
-rw-r--r--apps/ts.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/apps/ts.c b/apps/ts.c
index 57292e187c..96d16d4bd5 100644
--- a/apps/ts.c
+++ b/apps/ts.c
@@ -535,15 +535,18 @@ static int create_digest(BIO *input, const char *digest, const EVP_MD *md,
*md_value = OPENSSL_hexstr2buf(digest, &digest_len);
if (*md_value == NULL || md_value_len != digest_len) {
- OPENSSL_free(*md_value);
- *md_value = NULL;
BIO_printf(bio_err, "bad digest, %d bytes "
"must be specified\n", md_value_len);
- return 0;
+ goto err;
}
}
rv = md_value_len;
err:
+ if (rv <= 0) {
+ OPENSSL_free(*md_value);
+ *md_value = NULL;
+ rv = 0;
+ }
EVP_MD_CTX_free(md_ctx);
return rv;
}