summaryrefslogtreecommitdiff
path: root/libc/stdlib
diff options
context:
space:
mode:
authorWaldemar Brodkorb <wbx@openadk.org>2016-01-10 08:08:14 (GMT)
committerWaldemar Brodkorb <wbx@openadk.org>2016-01-10 08:08:14 (GMT)
commitcddda5f9beb3d61f1122df95ccfcf855931775b7 (patch)
tree1adc8fb6638c6ec6b897ec1f9b895258b8f76e1b /libc/stdlib
parent121ee94aa6af104ed33a83bc573739a6f2c02f54 (diff)
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.
Diffstat (limited to 'libc/stdlib')
-rw-r--r--libc/stdlib/malloc/realloc.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/libc/stdlib/malloc/realloc.c b/libc/stdlib/malloc/realloc.c
index 8d55289..bdfb526 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;