From c138d148974ab383044d1eec9922127faeb020f0 Mon Sep 17 00:00:00 2001 From: Benny Baumann Date: Thu, 15 Oct 2020 07:38:28 +0200 Subject: [PATCH] Release old memory on error Avoids leaking memory upon realloc failure. --- XUtils.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/XUtils.c b/XUtils.c index f654b4bc..4fccec3a 100644 --- a/XUtils.c +++ b/XUtils.c @@ -13,6 +13,7 @@ in the source distribution for its full text. #include #include #include +#include #include "CRT.h" @@ -20,6 +21,8 @@ in the source distribution for its full text. void fail() { CRT_done(); abort(); + + _exit(1); // Should never reach here } void* xMalloc(size_t size) { @@ -39,8 +42,13 @@ void* xCalloc(size_t nmemb, size_t size) { } void* xRealloc(void* ptr, size_t size) { - void* data = realloc(ptr, size); - if (!data && size > 0) { + if (!size) { + free(ptr); + return NULL; + } + void* data = realloc(ptr, size); // deepcode ignore MemoryLeakOnRealloc: this goes to fail() + if (!data) { + free(ptr); fail(); } return data;