summaryrefslogtreecommitdiffstats
path: root/XUtils.c
diff options
context:
space:
mode:
authorBenny Baumann <BenBE@geshi.org>2020-10-15 07:38:28 +0200
committerBenny Baumann <BenBE@geshi.org>2020-10-17 20:54:14 +0200
commitc138d148974ab383044d1eec9922127faeb020f0 (patch)
treecc18c47e64f9082db670bd8211dbb285eb66065c /XUtils.c
parent5e4b1826168b74d8b5e71227ded12980efd5a243 (diff)
Release old memory on error
Avoids leaking memory upon realloc failure.
Diffstat (limited to 'XUtils.c')
-rw-r--r--XUtils.c12
1 files 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 <stdlib.h>
#include <string.h>
#include <strings.h>
+#include <unistd.h>
#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;

© 2014-2024 Faster IT GmbH | imprint | privacy policy