[PATCH 4/4] git-compat-util.h: dietlibc-friendly x{malloc,realloc,calloc}
From: Eric Wong <hidden>
Date: 2016-06-15 22:42:15
Subsystem:
the rest · Maintainer:
Linus Torvalds
dietlibc versions of these allocators returns NULL if a size of zero is specified. Obviously, this is a problem with the x* wrappers since we check for them returning NULL. Down the line, it'd be better to hunt down and eliminate all calls to these functions when they are called with a zero argument. I've already added some checks for these cases that were exposed by tests. Signed-off-by: Eric Wong <redacted> --- git-compat-util.h | 23 ++++++++++++++++++++--- 1 files changed, 20 insertions(+), 3 deletions(-) 113dca27f9f95a76a0f98929720f5f567c7586b2
diff --git a/git-compat-util.h b/git-compat-util.h
index 0c98c99..bd2f150 100644
--- a/git-compat-util.h
+++ b/git-compat-util.h@@ -62,7 +62,12 @@ extern char *gitstrcasestr(const char *h static inline void *xmalloc(size_t size) { - void *ret = malloc(size); + void *ret; + + if (!size) + return NULL; + + ret = malloc(size); if (!ret) die("Out of memory, malloc failed"); return ret;
@@ -70,7 +75,14 @@ static inline void *xmalloc(size_t size) static inline void *xrealloc(void *ptr, size_t size) { - void *ret = realloc(ptr, size); + void *ret; + + if (!size) { + free(ptr); + return NULL; + } + + ret = realloc(ptr, size); if (!ret) die("Out of memory, realloc failed"); return ret;
@@ -78,7 +90,12 @@ static inline void *xrealloc(void *ptr, static inline void *xcalloc(size_t nmemb, size_t size) { - void *ret = calloc(nmemb, size); + void *ret; + + if (!nmemb || !size) + return NULL; + + ret = calloc(nmemb, size); if (!ret) die("Out of memory, calloc failed"); return ret;
--
1.0.GIT