Fix memory leak.
authorDr. Stephen Henson <steve@openssl.org>
Fri, 20 Mar 2015 23:08:30 +0000 (23:08 +0000)
committerDr. Stephen Henson <steve@openssl.org>
Fri, 20 Mar 2015 23:22:17 +0000 (23:22 +0000)
Reviewed-by: Emilia Käsper <emilia@openssl.org>
crypto/evp/evp_test.c

index 1b17f64b5ad6f2c66a89bfb3363e3614b04c1c6f..152465878e706b345dda936d4b536e82dc80bc10 100644 (file)
@@ -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;