[pacman-dev] [PATCH 2/3] pacsort: don't overwrite memory if realloc fails

Rikard Falkeborn rikard.falkeborn at gmail.com
Mon Aug 10 19:42:38 UTC 2015


That makes it impossible to free it later.

Signed-off-by: Rikard Falkeborn <rikard.falkeborn at gmail.com>
---
 src/util/pacsort.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/src/util/pacsort.c b/src/util/pacsort.c
index 003ec07..3337d97 100644
--- a/src/util/pacsort.c
+++ b/src/util/pacsort.c
@@ -104,10 +104,11 @@ static void buffer_free(struct buffer_t *buf)
 static int buffer_grow(struct buffer_t *buffer)
 {
 	size_t newsz = buffer->maxlen * 2.5;
-	buffer->mem = realloc(buffer->mem, newsz * sizeof(char));
-	if(!buffer->mem) {
+	char* new_mem = realloc(buffer->mem, newsz * sizeof(char));
+	if(!new_mem) {
 		return 1;
 	}
+	buffer->mem = new_mem;
 	buffer->maxlen = newsz;
 
 	return 0;
@@ -136,11 +137,12 @@ static struct list_t *list_new(size_t initial_size)
 static int list_grow(struct list_t *list)
 {
 	size_t newsz = list->maxcount * 2.5;
-	list->list = realloc(list->list, newsz * sizeof(char *));
-	if(!list->list) {
+	void **new_list = realloc(list->list, newsz * sizeof(char *));
+	if(!new_list) {
 		return 1;
 	}
 
+	list->list = new_list;
 	list->maxcount = newsz;
 
 	return 0;
-- 
2.5.0


More information about the pacman-dev mailing list