diff options
author | Jiasheng Jiang <jiasheng@iscas.ac.cn> | 2022-02-02 19:45:59 +0800 |
---|---|---|
committer | Pauli <pauli@openssl.org> | 2022-02-07 11:25:20 +1100 |
commit | 25ee18e7f8803f6aaaeca15b49ba46d3e4d3f817 (patch) | |
tree | 4bb7e5439d9706ba05efa1804990b379dc5630c0 /test/evp_test.c | |
parent | 6e47da6363e9e32c14f0c3a750ca04cd189c85fe (diff) |
evp_test: Add the missing check after calling OPENSSL_strdup and sk_OPENSSL_STRING_new_null
Since the memory allocation may fail, the 'mac_name' and 'controls'
could be NULL.
And the 'mac_name' will be printed in mac_test_run_mac() without check.
Also the result of 'params_n +
sk_OPENSSL_STRING_num(expected->controls)' in
mac_test_run_mac() will be 'params_n - 1' if allocation fails , which
does not make sense.
Therefore, it should be better to check them in order to guarantee the
complete success of initiation.
If fails, we also need to free the 'mdat' to avoid the memory leak.
Signed-off-by: Jiasheng Jiang <jiasheng@iscas.ac.cn>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
Reviewed-by: Paul Dale <pauli@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/17628)
(cherry picked from commit b2f90e93a07d992515782511a5770aa7cf7dc28f)
Diffstat (limited to 'test/evp_test.c')
-rw-r--r-- | test/evp_test.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/test/evp_test.c b/test/evp_test.c index f2b0924e2f..5e69b37b9b 100644 --- a/test/evp_test.c +++ b/test/evp_test.c @@ -1181,9 +1181,18 @@ static int mac_test_init(EVP_TEST *t, const char *alg) return 0; mdat->type = type; - mdat->mac_name = OPENSSL_strdup(alg); + if (!TEST_ptr(mdat->mac_name = OPENSSL_strdup(alg))) { + OPENSSL_free(mdat); + return 0; + } + mdat->mac = mac; - mdat->controls = sk_OPENSSL_STRING_new_null(); + if (!TEST_ptr(mdat->controls = sk_OPENSSL_STRING_new_null())) { + OPENSSL_free(mdat->mac_name); + OPENSSL_free(mdat); + return 0; + } + mdat->output_size = mdat->block_size = -1; t->data = mdat; return 1; |