From e225be1c504a9fbd84561e52bc565f121766a5d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Sat, 25 Dec 2021 23:25:30 +0100 Subject: [PATCH] tokenize: free content of argv on failure, and reset the argv pointer This fixes a memory leak when we failed to parse a command line (for example, because it contained an unclosed quote). --- tokenize.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tokenize.c b/tokenize.c index e29fed58..77cc3f1a 100644 --- a/tokenize.c +++ b/tokenize.c @@ -49,9 +49,7 @@ tokenize_cmdline(const char *cmdline, char ***argv) if (end == NULL) { if (delim != ' ') { LOG_ERR("unterminated %s quote", delim == '"' ? "double" : "single"); - free(*argv); - *argv = NULL; - return false; + goto err; } if (!push_argv(argv, &argv_size, p, final_end - p, &idx) || @@ -97,6 +95,9 @@ tokenize_cmdline(const char *cmdline, char ***argv) return true; err: + for (size_t i = 0; i < idx; i++) + free((*argv)[i]); free(*argv); + *argv = NULL; return false; }