summaryrefslogtreecommitdiffstats
path: root/test/evp_test.c
diff options
context:
space:
mode:
authorTodd Short <tshort@akamai.com>2016-11-17 11:56:47 -0500
committerRich Salz <rsalz@openssl.org>2016-11-20 16:08:15 -0500
commit0a2a5d26cea54f490474a366100cf4860a54e030 (patch)
tree7ee2a4b921a191fe3bd9ec90de615bc77920f03b /test/evp_test.c
parent4b9c2669f31da26bfe56f629973fa014083dc2a0 (diff)
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 <levitte@openssl.org> Reviewed-by: Rich Salz <rsalz@openssl.org> (Merged from https://github.com/openssl/openssl/pull/1946)
Diffstat (limited to 'test/evp_test.c')
-rw-r--r--test/evp_test.c39
1 files 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;
}