From 7b057f53fd06ca9f53873992eed5b8c652be0df1 Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Wed, 25 Dec 2013 23:30:25 +0100 Subject: [PATCH] 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 --- lib/memdebug.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) 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);