Browse Source

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 <k.kuznik@avsystem.com>
Krzysztof Kuznik 11 years ago
parent
commit
6c71e7ee00
1 changed files with 4 additions and 2 deletions
  1. 4 2
      file.c

+ 4 - 2
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;
 }