From 19d373c9b95ff5c9ee6d5a4cdb097670f69068d4 Mon Sep 17 00:00:00 2001 From: Rikard Falkeborn Date: Mon, 10 Aug 2015 21:42:37 +0200 Subject: [PATCH] pacsort: handle failing list_add Since it can fail, check the return value. If it fails, we need to free the memory of the object we wanted to add to the list. Signed-off-by: Rikard Falkeborn Signed-off-by: Allan McRae --- src/util/pacsort.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/util/pacsort.c b/src/util/pacsort.c index b0137ec4..003ec073 100644 --- a/src/util/pacsort.c +++ b/src/util/pacsort.c @@ -254,7 +254,10 @@ static char *explode(struct buffer_t *buffer, struct list_t *list) while((end = memchr(ptr, linedelim, &buffer->mem[buffer->len] - ptr))) { *end = '\0'; meta = input_new(ptr, end - ptr); - list_add(list, meta); + if(meta == NULL || list_add(list, meta) != 0) { + input_free(meta); + return NULL; + } ptr = end + 1; } @@ -294,6 +297,7 @@ static int splitfile(FILE *stream, struct buffer_t *buffer, struct list_t *list) if(buffer->len) { struct input_t *meta = input_new(buffer->mem, buffer->len + 1); if(meta == NULL || list_add(list, meta) != 0) { + input_free(meta); return 1; } }