From b1c045ba2bf7b994217e6c571431181c2384cf52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Wei=C3=9Fschuh?= Date: Sat, 2 Jul 2022 23:36:34 +0200 Subject: [PATCH 1/2] fix: prevent memory leak in object_add_field() On errors the Field has to be freed with field_freep to also free the allocated name member. Fixes #51 --- lib/object.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/object.c b/lib/object.c index 095896e..bb00a54 100644 --- a/lib/object.c +++ b/lib/object.c @@ -32,13 +32,16 @@ static long field_compare(const void *key, void *value) { static void field_freep(void *ptr) { Field *field = *(void **)ptr; + if (!field) + return; + free(field->name); varlink_value_clear(&field->value); free(field); } static long object_add_field(VarlinkObject *object, const char *name, Field **fieldp) { - _cleanup_(freep) Field *field = NULL; + _cleanup_(field_freep) Field *field = NULL; long r; field = calloc(1, sizeof(Field)); From d0833e69a41888f3c9d6cd26ab61bbc0a5783a35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Wei=C3=9Fschuh?= Date: Sat, 2 Jul 2022 23:40:31 +0200 Subject: [PATCH 2/2] tests: prevent memory leak in test-json --- lib/test-json.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/test-json.c b/lib/test-json.c index f32facd..86aa7ab 100644 --- a/lib/test-json.c +++ b/lib/test-json.c @@ -53,7 +53,7 @@ static int read_file(FILE *file, char **contentsp) { int main(int argc, char **argv) { _cleanup_(freep) char *input = NULL; _cleanup_(fclosep) FILE *file = NULL; - VarlinkObject *s; + _cleanup_(varlink_object_unrefp) VarlinkObject *s = NULL; assert(argc != 1);