From 5724bd49a2f11e1e9663ac82f4b5e63e18da65e6 Mon Sep 17 00:00:00 2001
From: "Dr. Stephen Henson" <steve@openssl.org>
Date: Fri, 20 Mar 2015 23:08:30 +0000
Subject: [PATCH] Fix memory leak.
MIME-Version: 1.0
Content-Type: text/plain; charset=utf8
Content-Transfer-Encoding: 8bit

Reviewed-by: Emilia Käsper <emilia@openssl.org>
---
 crypto/evp/evp_test.c | 20 ++++++++++++++++----
 1 file changed, 16 insertions(+), 4 deletions(-)

diff --git a/crypto/evp/evp_test.c b/crypto/evp/evp_test.c
index 1b17f64b5a..152465878e 100644
--- a/crypto/evp/evp_test.c
+++ b/crypto/evp/evp_test.c
@@ -247,16 +247,27 @@ static void hex_print(const char *name, const unsigned char *buf, size_t len)
     fputs("\n", stderr);
 }
 
+static void free_expected(struct evp_test *t)
+{
+    if (t->expected_err) {
+        OPENSSL_free(t->expected_err);
+        t->expected_err = NULL;
+    }
+    if (t->out_expected) {
+        OPENSSL_free(t->out_expected);
+        OPENSSL_free(t->out_got);
+        t->out_expected = NULL;
+        t->out_got = NULL;
+    }
+}
+
 static void print_expected(struct evp_test *t)
 {
     if (t->out_expected == NULL)
         return;
     hex_print("Expected:", t->out_expected, t->out_len);
     hex_print("Got:     ", t->out_got, t->out_len);
-    OPENSSL_free(t->out_expected);
-    OPENSSL_free(t->out_got);
-    t->out_expected = NULL;
-    t->out_got = NULL;
+    free_expected(t);
 }
 
 static int check_test_error(struct evp_test *t)
@@ -313,6 +324,7 @@ static int setup_test(struct evp_test *t, const struct evp_test_method *tmeth)
             OPENSSL_free(t->expected_err);
             t->expected_err = NULL;
         }
+        free_expected(t);
     }
     t->meth = tmeth;
     return 1;
-- 
2.25.1