From 19770b6949b9a95038f3216da773204eadfdd6bc Mon Sep 17 00:00:00 2001 From: Jo-Philipp Wich Date: Tue, 6 Oct 2020 08:06:16 +0200 Subject: [PATCH] file: use dynamic memory allocation for tempfile name MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Allocating a 4KB stack space buffer just for formatting a tempfile name does not seem ideal. Fixes: aa46546794ac ("file: uci_file_commit: fix memory leak") Signed-off-by: Jo-Philipp Wich Signed-off-by: Petr Å tetiar --- file.c | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/file.c b/file.c index 5502a42..ce1acb2 100644 --- a/file.c +++ b/file.c @@ -33,10 +33,6 @@ #include "uci.h" #include "uci_internal.h" -#ifndef MAX_PATH -#define MAX_PATH 4096 -#endif - #define LINEBUF 32 /* @@ -727,10 +723,10 @@ static void uci_file_commit(struct uci_context *ctx, struct uci_package **packag FILE *f1, *f2 = NULL; char *volatile name = NULL; char *volatile path = NULL; - char filename[MAX_PATH] = {0}; + char *filename = NULL; struct stat statbuf; volatile bool do_rename = false; - int fd; + int fd, sz; if (!p->path) { if (overwrite) @@ -739,8 +735,9 @@ static void uci_file_commit(struct uci_context *ctx, struct uci_package **packag UCI_THROW(ctx, UCI_ERR_INVAL); } - if (snprintf(filename, MAX_PATH, "%s/.%s.uci-XXXXXX", ctx->confdir, p->e.name) < 0) - UCI_THROW(ctx, UCI_ERR_MEM); + sz = snprintf(NULL, 0, "%s/.%s.uci-XXXXXX", ctx->confdir, p->e.name); + filename = alloca(sz + 1); + snprintf(filename, sz + 1, "%s/.%s.uci-XXXXXX", ctx->confdir, p->e.name); /* open the config file for writing now, so that it is locked */ f1 = uci_open_stream(ctx, p->path, NULL, SEEK_SET, true, true); -- 2.30.2