From cddda5f9beb3d61f1122df95ccfcf855931775b7 Mon Sep 17 00:00:00 2001 From: Waldemar Brodkorb Date: Sun, 10 Jan 2016 09:08:14 +0100 Subject: order of special checks matters The order of special checks seems critical for some applications. Xorg 1.18.0 fails to start with XNFreallocarray error. Took me some time to run with MALLOC_DEBUG=2 to find out. MALLOC_STANDARD is not affected. --- libc/stdlib/malloc/realloc.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/libc/stdlib/malloc/realloc.c b/libc/stdlib/malloc/realloc.c index 8d55289c5..bdfb52694 100644 --- a/libc/stdlib/malloc/realloc.c +++ b/libc/stdlib/malloc/realloc.c @@ -26,14 +26,16 @@ realloc (void *mem, size_t new_size) size_t size; char *base_mem; + if (! mem) + return malloc (new_size); + /* Check for special cases. */ if (! new_size) { free (mem); return NULL; } - if (! mem) - return malloc (new_size); + /* This matches the check in malloc() */ if (unlikely(((unsigned long)new_size > (unsigned long)(MALLOC_HEADER_SIZE*-2)))) return NULL; -- cgit v1.2.3