Eric Wong <normalperson@yhbt.net> writes: > 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. I agree that it is a bug to rely on *alloc(0) not returning NULL, but this patch is too risky. It would be a good thing to have debugging variant of x* wrappers that barf on a 0-byte allocation request to find the offending callers, instead of returning NULL, maybe like the attached patch. Since eradicating *alloc(0) calls is the right way to go, but it takes time. Touching x* wrappers for general public should not be done before it is done. It breaks things for everybody, while the current code is broken only for diet people and developers that use the debugging variant of x* wrappers. -- >8 -- diff --git a/git-compat-util.h b/git-compat-util.h index 0c98c99..08fd6bc 100644 --- a/git-compat-util.h +++ b/git-compat-util.h @@ -60,9 +60,17 @@ extern int gitsetenv(const char *, const extern char *gitstrcasestr(const char *haystack, const char *needle); #endif +#ifdef DEBUG_0ALLOC +#define debug_0alloc(sz) assert(0 < (sz)) +#else +#define debug_0alloc(sz) +#endif + static inline void *xmalloc(size_t size) { void *ret = malloc(size); + + debug_0alloc(size); if (!ret) die("Out of memory, malloc failed"); return ret; @@ -71,6 +79,7 @@ static inline void *xmalloc(size_t size) static inline void *xrealloc(void *ptr, size_t size) { void *ret = realloc(ptr, size); + debug_0alloc(size); if (!ret) die("Out of memory, realloc failed"); return ret; @@ -79,6 +88,7 @@ static inline void *xrealloc(void *ptr, static inline void *xcalloc(size_t nmemb, size_t size) { void *ret = calloc(nmemb, size); + debug_0alloc(nmemb); if (!ret) die("Out of memory, calloc failed"); return ret; - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.htmlReceived on Sun Dec 25 05:29:06 2005
This archive was generated by hypermail 2.1.8 : 2005-12-25 05:29:13 EST