summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRikard Falkeborn <rikard.falkeborn@gmail.com>2015-08-10 21:42:37 +0200
committerAllan McRae <allan@archlinux.org>2015-10-21 15:06:25 +1000
commit19d373c9b95ff5c9ee6d5a4cdb097670f69068d4 (patch)
tree88dae876f5e5986f5800036e4e70053fa92509a5
parent4b3df10d5d53af94475e006c71ed262efcab6f0f (diff)
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 <rikard.falkeborn@gmail.com> Signed-off-by: Allan McRae <allan@archlinux.org>
-rw-r--r--src/util/pacsort.c6
1 files changed, 5 insertions, 1 deletions
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;
}
}