From ff8db5a85d60b21a711f8707791119adbbcffadc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20L=C3=A9caille?= Date: Thu, 30 Nov 2023 09:26:05 +0100 Subject: [PATCH] BUG/MINOR: config: Stopped parsing upon unmatched environment variables When an environment variable could not be matched by getenv(), the current character to be parsed by parse_line() from variable is the trailing double quotes. If nothing is done in such a case, this character is skipped by parse_line(), then the following spaces are parsed as an empty argument. To fix this, skip the double quotes character and the following spaces to make variable point to the next argument to be parsed. Thank you to @sigint2 for having reported this issue in GH #2367. Must be backported as far as 2.4. --- src/tools.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/tools.c b/src/tools.c index 0b951e15c..89302eb10 100644 --- a/src/tools.c +++ b/src/tools.c @@ -5809,6 +5809,21 @@ uint32_t parse_line(char *in, char *out, size_t *outlen, char **args, int *nbarg } } } + else { + /* An unmatched environment variable was parsed. + * Let's skip the trailing double-quote character + * and spaces. + */ + if (likely(*var_name != '.') && *in == '"') { + in++; + while (isspace((unsigned char)*in)) + in++; + if (dquote) { + dquote = 0; + quote = NULL; + } + } + } word_expand = NULL; } else {