Update leak test to check return values.
authorDr. Stephen Henson <steve@openssl.org>
Sun, 10 Jan 2016 23:29:46 +0000 (23:29 +0000)
committerDr. Stephen Henson <steve@openssl.org>
Mon, 11 Jan 2016 02:41:16 +0000 (02:41 +0000)
Reviewed-by: Viktor Dukhovni <viktor@openssl.org>
test/memleaktest.c

index cdb61a3608f7cbfe6659a7c24963f9a82f12a8c8..f8945904ac24b51a39b0cb7ef1238321226d4e45 100644 (file)
 #include <string.h>
 #include <openssl/bio.h>
 #include <openssl/crypto.h>
-#include <setjmp.h>
-
-#ifndef OPENSSL_NO_CRYPTO_MDEBUG
-static sigjmp_buf env;
-
-static void handler(int sig)
-{
-    siglongjmp(env, 1);
-}
-#endif
 
 int main(int argc, char **argv)
 {
 #ifndef OPENSSL_NO_CRYPTO_MDEBUG
     char *p;
     char *lost;
-    int aborted = 0;
+    int noleak;
 
     p = getenv("OPENSSL_DEBUG_MEMORY");
     if (p != NULL && strcmp(p, "on") == 0)
@@ -85,18 +75,16 @@ int main(int argc, char **argv)
         return 1;
     }
 
-    signal(SIGABRT, handler);
-
     if (argv[1] && strcmp(argv[1], "freeit") == 0) {
         OPENSSL_free(lost);
         lost = NULL;
     }
 
-    if (sigsetjmp(env, 0) == 0)
-        CRYPTO_mem_leaks_fp(stderr);
-    else
-        aborted = 1;
-    return ((lost != NULL) ^ (aborted == 1));
+    noleak = CRYPTO_mem_leaks_fp(stderr);
+    /* If -1 return value something bad happened */
+    if (noleak == -1)
+        return 1;
+    return ((lost != NULL) ^ (noleak == 0));
 #else
     return 0;
 #endif