From 6c71e7ee00c98eec9bd1cc92b903738863aebd57 Mon Sep 17 00:00:00 2001 From: Krzysztof Kuznik Date: Wed, 22 Aug 2012 10:11:23 +0200 Subject: [PATCH] uci: libuci leaking memory on non-existent config file In file file.c function uci_file_load() allocates memory for filename. When uci_open_stream() failed with exception this memory was never freed. This patch makes call to uci_open_stream() wrapped in exception handling inside uci_file_load() where filename is freed. Signed-off-by: Krzysztof Kuznik --- file.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/file.c b/file.c index c69a297..d104933 100644 --- a/file.c +++ b/file.c @@ -837,9 +837,9 @@ static struct uci_package *uci_file_load(struct uci_context *ctx, const char *na break; } + UCI_TRAP_SAVE(ctx, done); file = uci_open_stream(ctx, filename, SEEK_SET, false, false); ctx->err = 0; - UCI_TRAP_SAVE(ctx, done); UCI_INTERNAL(uci_import, ctx, file, name, &package, true); UCI_TRAP_RESTORE(ctx); @@ -851,8 +851,10 @@ static struct uci_package *uci_file_load(struct uci_context *ctx, const char *na done: uci_close_stream(file); - if (ctx->err) + if (ctx->err) { + free(filename); UCI_THROW(ctx, ctx->err); + } return package; } -- 2.11.0