diff options
author | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2016-09-03 09:31:15 +0200 |
---|---|---|
committer | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2016-09-03 09:55:37 +0200 |
commit | 66e010b1181ad60338b4302d1437a1e89295c930 (patch) | |
tree | c195ccdb3e9ec6f2a876fe04fe02e08316e7610d | |
parent | 9eb49dd965de73373f5103a9aecca65369b015ba (diff) | |
download | gnutls-66e010b1181ad60338b4302d1437a1e89295c930.tar.gz |
tests: backported hash-large from master
-rw-r--r-- | tests/slow/hash-large.c | 56 |
1 files changed, 54 insertions, 2 deletions
diff --git a/tests/slow/hash-large.c b/tests/slow/hash-large.c index 41c2bd5012..5c3fd2ce51 100644 --- a/tests/slow/hash-large.c +++ b/tests/slow/hash-large.c @@ -29,10 +29,56 @@ #include <limits.h> #include "utils.h" +#if defined(__FreeBSD__) +/* its libc cannot handle that large allocations */ +void doit(void) +{ + exit(77); +} + +#else /* not freebsd */ + +#if !defined(_WIN32) +# include <signal.h> +# include <unistd.h> + +static void exit_77(int signo) +{ + _exit(77); +} +#endif + #define MIN(x,y) ((x)<(y))?(x):(y) /* Test hashing on large buffers */ +#ifdef HAVE_MMAP + +#include <sys/mman.h> + +static size_t _mmap_size; +static void *get_mem(size_t size) +{ + void *p; + _mmap_size = size; + p = mmap(NULL, size, PROT_READ, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0); + if (p == MAP_FAILED) + return NULL; + return p; +} + +static void put_mem(void *mem) +{ + munmap(mem, _mmap_size); +} + +#else + +# define get_mem(x) calloc(1, x) +# define put_mem(x) free(x) + +#endif + void doit(void) { unsigned char digest[32]; @@ -44,10 +90,15 @@ void doit(void) if (sizeof(size) <= 4) exit(77); +#if !defined(_WIN32) + signal(SIGSEGV, exit_77); + signal(SIGBUS, exit_77); +#endif + global_init(); size = (ssize_t)UINT_MAX + (ssize_t)64*1024; - buf = calloc(1, size); + buf = get_mem(size); if (buf == NULL) exit(77); @@ -129,6 +180,7 @@ void doit(void) } } - free(buf); + put_mem(buf); gnutls_global_deinit(); } +#endif |