Hello.
Following patch fixes issues that can be seen with -fsanitize=address on GCC 7.
Patch was tested with make test.
Thanks, Martin
From 79dace4bdac4f571c14c7edb9b1007c155475c3f Mon Sep 17 00:00:00 2001 From: marxin <mliska@suse.cz> Date: Wed, 5 Apr 2017 14:32:29 +0200 Subject: [PATCH 2/2] Fix stack-use-after-scope error reported by ASAN by GCC 7.
The use-after-scope is triggered here:
READ of size 8 at 0x7ffc4f674e20 thread T0
#0 0x6f0b69 in finish_command /home/marxin/Programming/git/run-command.c:570
#1 0x5b6101 in kill_multi_file_filter /home/marxin/Programming/git/convert.c:570
#2 0x5b798a in kill_multi_file_filter /home/marxin/Programming/git/convert.c:770Signed-off-by: Martin Liska <mliska@suse.cz> --- convert.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
Show changes to convert.c +4 −2
diff --git a/convert.c b/convert.c index 8d652bf27..bf4eaf10e 100644 --- a/convert.c +++ b/convert.c @@ -568,6 +568,7 @@ static void kill_multi_file_filter(struct hashmap *hashmap, struct cmd2process * entry->process.clean_on_exit = 0; kill(entry->process.pid, SIGTERM); finish_command(&entry->process); + free(entry->process.argv); hashmap_remove(hashmap, entry, NULL); free(entry); @@ -582,6 +583,7 @@ static void stop_multi_file_filter(struct child_process *process) sigchain_pop(SIGPIPE); /* Finish command will wait until the shutdown is complete. */ finish_command(process); + free(process->argv); } static struct cmd2process *start_multi_file_filter(struct hashmap *hashmap, const char *cmd) @@ -589,7 +591,6 @@ static struct cmd2process *start_multi_file_filter(struct hashmap *hashmap, cons int err; struct cmd2process *entry; struct child_process *process; - const char *argv[] = { cmd, NULL }; struct string_list cap_list = STRING_LIST_INIT_NODUP; char *cap_buf; const char *cap_name; @@ -600,7 +601,8 @@ static struct cmd2process *start_multi_file_filter(struct hashmap *hashmap, cons process = &entry->process; child_process_init(process); - process->argv = argv; + process->argv = xcalloc(2, sizeof(const char *)); + process->argv[0] = cmd; process->use_shell = 1; process->in = -1; process->out = -1;
-- 2.12.2