projects
/
openssl.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Enable/disable crypto-mdebug just like other features
[openssl.git]
/
test
/
memleaktest.c
diff --git
a/test/memleaktest.c
b/test/memleaktest.c
index cccbcf6625b55ba306f4a3380a0ed65bc7b25a79..cdb61a3608f7cbfe6659a7c24963f9a82f12a8c8 100644
(file)
--- a/
test/memleaktest.c
+++ b/
test/memleaktest.c
@@
-56,12
+56,23
@@
#include <string.h>
#include <openssl/bio.h>
#include <openssl/crypto.h>
#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)
{
int main(int argc, char **argv)
{
-#if
def
CRYPTO_MDEBUG
+#if
ndef OPENSSL_NO_
CRYPTO_MDEBUG
char *p;
char *lost;
char *p;
char *lost;
+ int aborted = 0;
p = getenv("OPENSSL_DEBUG_MEMORY");
if (p != NULL && strcmp(p, "on") == 0)
p = getenv("OPENSSL_DEBUG_MEMORY");
if (p != NULL && strcmp(p, "on") == 0)
@@
-74,15
+85,19
@@
int main(int argc, char **argv)
return 1;
}
return 1;
}
- if (argv[1] && strcmp(argv[1], "freeit") == 0)
+ signal(SIGABRT, handler);
+
+ if (argv[1] && strcmp(argv[1], "freeit") == 0) {
OPENSSL_free(lost);
OPENSSL_free(lost);
+ lost = NULL;
+ }
- CRYPTO_mem_leaks_fp(stderr);
- return 0;
+ if (sigsetjmp(env, 0) == 0)
+ CRYPTO_mem_leaks_fp(stderr);
+ else
+ aborted = 1;
+ return ((lost != NULL) ^ (aborted == 1));
#else
#else
- if (argv[1] && strcmp(argv[1], "freeit") == 0)
- return 0;
- fprintf(stderr, "Leak simulated\n");
- return 1;
+ return 0;
#endif
}
#endif
}