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 <in> 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 <in> 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.
This commit is contained in:
Frdric Lcaille 2023-11-30 09:26:05 +01:00 committed by Willy Tarreau
parent fa0a304f35
commit ff8db5a85d

View File

@ -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 {