curl_dofree: allow free(NULL)
authorDaniel Stenberg <daniel@haxx.se>
Wed, 25 Dec 2013 22:30:25 +0000 (23:30 +0100)
committerDaniel Stenberg <daniel@haxx.se>
Wed, 25 Dec 2013 22:30:25 +0000 (23:30 +0100)
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

lib/memdebug.c

index 7d68af8..4afa620 100644 (file)
@@ -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);