diff -up hashalot-0.3/hashalot.c.orig hashalot-0.3/hashalot.c --- hashalot-0.3/hashalot.c.orig 2009-02-11 19:31:16.000000000 -0600 +++ hashalot-0.3/hashalot.c 2009-02-11 19:47:46.000000000 -0600 @@ -34,6 +34,7 @@ #include "sha512.h" #define PASSWDBUFFLEN 130 +#define MAXHASHLEN (ULONG_MAX/2 - 2) typedef int (*phash_func_t)(char dest[], size_t dest_len, const char src[], size_t src_len); @@ -179,8 +180,7 @@ static void * xmalloc (size_t size) { void *p; - if (size == 0) - return NULL; + assert(size != 0); p = malloc(size); if (p == NULL) { @@ -239,6 +239,12 @@ main(int argc, char *argv[]) show_usage(argv[0]); exit(EXIT_FAILURE); } + if (hashlen >= MAXHASHLEN) { + fprintf(stderr, + "please supply a value smaller than %lu for the -n option\n", + MAXHASHLEN); + exit(EXIT_FAILURE); + } break; case 's': salt = optarg;