diff options
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | realloc.c | 24 |
2 files changed, 22 insertions, 6 deletions
@@ -1,5 +1,9 @@ 2012-09-16 Niels Möller <nisse@lysator.liu.se> + * realloc.c (nettle_realloc): Only call libc realloc if length > + 0, otherwise call free. Fixes a small memory leak. + (nettle_xrealloc): Likewise. + * run-tests (test_program): Don't quote $EMULATOR; allow it to expand to program and arguments (e.g., valgrind). @@ -31,20 +31,32 @@ #include "realloc.h" +/* NOTE: Calling libc realloc with size == 0 is not required to + totally free the object, it is allowed to return a valid + pointer. */ void * nettle_realloc(void *ctx UNUSED, void *p, unsigned length) { - return realloc(p, length); + if (length > 0) + return realloc(p, length); + + free(p); + return NULL; } void * nettle_xrealloc(void *ctx UNUSED, void *p, unsigned length) { - void *n = realloc(p, length); - if (length && !n) + if (length > 0) { - fprintf(stderr, "Virtual memory exhausted.\n"); - abort(); + void *n = realloc(p, length); + if (!n) + { + fprintf(stderr, "Virtual memory exhausted.\n"); + abort(); + } + return n; } - return n; + free(p); + return NULL; } |