From: Frédéric Lécaille Date: Thu, 30 Nov 2023 08:26:05 +0000 (+0100) Subject: BUG/MINOR: config: Stopped parsing upon unmatched environment variables X-Git-Tag: v2.9-dev12~3 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ff8db5a85d60b21a711f8707791119adbbcffadc;p=thirdparty%2Fhaproxy.git 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. --- diff --git a/src/tools.c b/src/tools.c index 0b951e15c4..89302eb105 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 {