From: Krzysztof Kuznik Date: Wed, 22 Aug 2012 08:11:23 +0000 (+0200) Subject: uci: libuci leaking memory on non-existent config file X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=6c71e7ee00c98eec9bd1cc92b903738863aebd57;p=project%2Fuci.git 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 --- 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; }