From 024d681e69cc1ea7177a7eae9aeb1947412950ed Mon Sep 17 00:00:00 2001 From: Todd Short Date: Thu, 17 Nov 2016 11:56:47 -0500 Subject: [PATCH] Skipping tests in evp_test leaks memory When configured with "no-mdc2 enable-crypto-mdebug" the evp_test will leak memory due to skipped tests, and error out. Also fix a skip condition Reviewed-by: Richard Levitte Reviewed-by: Rich Salz (Merged from https://github.com/openssl/openssl/pull/1968) --- test/evp_test.c | 39 ++++++++++++++++++++------------------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/test/evp_test.c b/test/evp_test.c index 0c352d67ff..907e083c9f 100644 --- a/test/evp_test.c +++ b/test/evp_test.c @@ -351,25 +351,28 @@ static int setup_test(struct evp_test *t, const struct evp_test_method *tmeth) if (t->meth) { t->ntests++; if (t->skip) { - t->meth = tmeth; t->nskip++; - return 1; - } - t->err = NULL; - if (t->meth->run_test(t) != 1) { - fprintf(stderr, "%s test error line %d\n", - t->meth->name, t->start_line); - return 0; - } - if (!check_test_error(t)) { - if (t->err) - ERR_print_errors_fp(stderr); - t->errors++; + } else { + /* run the test */ + t->err = NULL; + if (t->meth->run_test(t) != 1) { + fprintf(stderr, "%s test error line %d\n", + t->meth->name, t->start_line); + return 0; + } + if (!check_test_error(t)) { + if (t->err) + ERR_print_errors_fp(stderr); + t->errors++; + } } + /* clean it up */ ERR_clear_error(); - t->meth->cleanup(t); - OPENSSL_free(t->data); - t->data = NULL; + if (t->data != NULL) { + t->meth->cleanup(t); + OPENSSL_free(t->data); + t->data = NULL; + } OPENSSL_free(t->expected_err); t->expected_err = NULL; free_expected(t); @@ -1212,9 +1215,7 @@ static int pkey_test_init(struct evp_test *t, const char *name, rv = find_key(&pkey, name, t->public); if (!rv) rv = find_key(&pkey, name, t->private); - if (!rv) - return 0; - if (!pkey) { + if (!rv || pkey == NULL) { t->skip = 1; return 1; } -- 2.40.0