[pacman-dev] [PATCH 1/3] pacsort: handle failing list_add

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


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 <rikard.falkeborn at gmail.com>
---
 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 b0137ec..003ec07 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;
 		}
 	}
-- 
2.5.0


More information about the pacman-dev mailing list