summaryrefslogtreecommitdiffstats
path: root/test/ecdsatest.c
diff options
context:
space:
mode:
authorslontis <shane.lontis@oracle.com>2023-03-21 16:06:06 +1000
committerTodd Short <todd.short@me.com>2023-03-31 14:57:47 -0400
commit4befe81a99b89c52b749a87eece82c1cba4fab12 (patch)
treed9f7b48b1ab3ddb6e2eb2bc781c653f600ab3c6b /test/ecdsatest.c
parent027226eb229c41d7066366a8b9ef8241da7500bd (diff)
Fix mem leak in ECDSA_sign().
Similiar to the issue found in PR #20553 for DSA_sign(). ECDSA_sign() leaked memory if the signature was NULL when i2d_ECDSA_SIG was called. Note that this does not affect the higher level EVP functions as they correctly handle NULL. Reviewed-by: Tomas Mraz <tomas@openssl.org> Reviewed-by: Paul Dale <pauli@openssl.org> Reviewed-by: Todd Short <todd.short@me.com> (Merged from https://github.com/openssl/openssl/pull/20554)
Diffstat (limited to 'test/ecdsatest.c')
-rw-r--r--test/ecdsatest.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/test/ecdsatest.c b/test/ecdsatest.c
index 0baeb89230..0954239684 100644
--- a/test/ecdsatest.c
+++ b/test/ecdsatest.c
@@ -346,6 +346,22 @@ static int test_builtin_as_sm2(int n)
return test_builtin(n, EVP_PKEY_SM2);
}
# endif
+
+static int test_ecdsa_sig_NULL(void)
+{
+ int ret;
+ unsigned int siglen;
+ unsigned char dgst[128] = { 0 };
+ EC_KEY *eckey = NULL;
+
+ ret = TEST_ptr(eckey = EC_KEY_new_by_curve_name(NID_X9_62_prime256v1))
+ && TEST_int_eq(EC_KEY_generate_key(eckey), 1)
+ && TEST_int_eq(ECDSA_sign(0, dgst, sizeof(dgst), NULL, &siglen, eckey), 1)
+ && TEST_int_gt(siglen, 0);
+ EC_KEY_free(eckey);
+ return ret;
+}
+
#endif /* OPENSSL_NO_EC */
int setup_tests(void)
@@ -365,6 +381,7 @@ int setup_tests(void)
return 0;
}
ADD_ALL_TESTS(test_builtin_as_ec, crv_len);
+ ADD_TEST(test_ecdsa_sig_NULL);
# ifndef OPENSSL_NO_SM2
ADD_ALL_TESTS(test_builtin_as_sm2, crv_len);
# endif