summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDr. Matthias St. Pierre <Matthias.St.Pierre@ncp-e.com>2018-09-10 00:20:12 +0200
committerMatt Caswell <matt@openssl.org>2018-09-10 11:11:43 +0100
commit35db366cf453427c855bea8ca097618a8a8d7ff0 (patch)
tree4e32263a177677cfa16a51a3a181993c55e0a6cf
parent427e91d928ce7a1c583e4bba761cb17a85ac95b4 (diff)
test/evp_extra_test.c: fix null pointer dereference
It's actually not a real issue but caused by the absence of the default case which does not occur in reality but which makes coverity see a code path where pkey remains unassigned. Reported by Coverity Scan (CID 1423323) [extended tests] Reviewed-by: Nicola Tuveri <nic.tuv@gmail.com> Reviewed-by: Matt Caswell <matt@openssl.org> (Merged from https://github.com/openssl/openssl/pull/7158)
-rw-r--r--test/evp_extra_test.c43
1 files changed, 24 insertions, 19 deletions
diff --git a/test/evp_extra_test.c b/test/evp_extra_test.c
index f0b0040eae..7b847eed8e 100644
--- a/test/evp_extra_test.c
+++ b/test/evp_extra_test.c
@@ -855,27 +855,32 @@ static int test_EVP_PKEY_check(int i)
p = input;
- if (type == 0 &&
- (!TEST_ptr(pkey = d2i_AutoPrivateKey(NULL, &p, input_len))
- || !TEST_ptr_eq(p, input + input_len)
- || !TEST_int_eq(EVP_PKEY_id(pkey), expected_id)))
- goto done;
-
+ switch (type) {
+ case 0:
+ if (!TEST_ptr(pkey = d2i_AutoPrivateKey(NULL, &p, input_len))
+ || !TEST_ptr_eq(p, input + input_len)
+ || !TEST_int_eq(EVP_PKEY_id(pkey), expected_id))
+ goto done;
+ break;
#ifndef OPENSSL_NO_EC
- if (type == 1 &&
- (!TEST_ptr(pubkey = BIO_new_mem_buf(input, input_len))
- || !TEST_ptr(eckey = d2i_EC_PUBKEY_bio(pubkey, NULL))
- || !TEST_ptr(pkey = EVP_PKEY_new())
- || !TEST_true(EVP_PKEY_assign_EC_KEY(pkey, eckey))))
- goto done;
-
- if (type == 2 &&
- (!TEST_ptr(eckey = d2i_ECParameters(NULL, &p, input_len))
- || !TEST_ptr_eq(p, input + input_len)
- || !TEST_ptr(pkey = EVP_PKEY_new())
- || !TEST_true(EVP_PKEY_assign_EC_KEY(pkey, eckey))))
- goto done;
+ case 1:
+ if (!TEST_ptr(pubkey = BIO_new_mem_buf(input, input_len))
+ || !TEST_ptr(eckey = d2i_EC_PUBKEY_bio(pubkey, NULL))
+ || !TEST_ptr(pkey = EVP_PKEY_new())
+ || !TEST_true(EVP_PKEY_assign_EC_KEY(pkey, eckey)))
+ goto done;
+ break;
+ case 2:
+ if (!TEST_ptr(eckey = d2i_ECParameters(NULL, &p, input_len))
+ || !TEST_ptr_eq(p, input + input_len)
+ || !TEST_ptr(pkey = EVP_PKEY_new())
+ || !TEST_true(EVP_PKEY_assign_EC_KEY(pkey, eckey)))
+ goto done;
+ break;
#endif
+ default:
+ return 0;
+ }
if (!TEST_ptr(ctx = EVP_PKEY_CTX_new(pkey, NULL)))
goto done;