From: Daniel Stenberg Date: Wed, 25 Dec 2013 22:30:25 +0000 (+0100) Subject: curl_dofree: allow free(NULL) X-Git-Tag: curl-7_35_0~178 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7b057f53fd06ca9f53873992eed5b8c652be0df1;p=curl curl_dofree: allow free(NULL) Previously this memdebug free() replacement didn't properly work with a NULL argument which has made us write code that avoids calling free(NULL) - which causes some extra nuisance and unnecessary code. Starting now, we should allow free(NULL) even when built with the memdebug system enabled. free(NULL) is permitted by POSIX --- diff --git a/lib/memdebug.c b/lib/memdebug.c index 7d68af874..4afa620a0 100644 --- a/lib/memdebug.c +++ b/lib/memdebug.c @@ -314,7 +314,7 @@ void curl_dofree(void *ptr, int line, const char *source) { struct memdebug *mem; - assert(ptr != NULL); + if(ptr) { #ifdef __INTEL_COMPILER # pragma warning(push) @@ -322,17 +322,18 @@ void curl_dofree(void *ptr, int line, const char *source) /* 1684: conversion from pointer to same-sized integral type */ #endif - mem = (void *)((char *)ptr - offsetof(struct memdebug, mem)); + mem = (void *)((char *)ptr - offsetof(struct memdebug, mem)); #ifdef __INTEL_COMPILER # pragma warning(pop) #endif - /* destroy */ - mt_free_fill(mem->mem, mem->size); + /* destroy */ + mt_free_fill(mem->mem, mem->size); - /* free for real */ - (Curl_cfree)(mem); + /* free for real */ + (Curl_cfree)(mem); + } if(source) curl_memlog("MEM %s:%d free(%p)\n", source, line, (void *)ptr);