From: William Lallemand Date: Thu, 18 Jun 2020 16:03:57 +0000 (+0200) Subject: BUG/MINOR: mworker/cli: fix the escaping in the master CLI X-Git-Tag: v2.2-dev10~11 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=fe249c3df53127d53d55c3fda8e6be7f22cfa58b;p=thirdparty%2Fhaproxy.git BUG/MINOR: mworker/cli: fix the escaping in the master CLI The master CLI must not do the escaping since it forwards the commands to another CLI. It should be able to split into words by taking care of the escaping, but must not remove the forwarded backslashes. This fix do the same thing as the previous patch applied to the cli_parse_request() function, by taking care of the escaping during the word split, but it also remove the part which was removing the backslashes from the forwarded command. --- diff --git a/src/cli.c b/src/cli.c index 5912e21b02..36438c7ca8 100644 --- a/src/cli.c +++ b/src/cli.c @@ -2074,29 +2074,25 @@ int pcli_parse_request(struct stream *s, struct channel *req, char **errmsg, int /* splits the command in words */ while (i < MAX_STATS_ARGS && p < end) { - int j, k; - /* skip leading spaces/tabs */ p += strspn(p, " \t"); if (!*p) break; args[i] = p; - p += strcspn(p, " \t"); - *p++ = 0; - - /* unescape backslashes (\) */ - for (j = 0, k = 0; args[i][k]; k++) { - if (args[i][k] == '\\') { - if (args[i][k + 1] == '\\') - k++; - else - continue; + while (1) { + p += strcspn(p, " \t\\"); + /* escaped chars using backlashes (\) */ + if (*p == '\\') { + if (!*++p) + break; + if (!*++p) + break; + } else { + break; } - args[i][j] = args[i][k]; - j++; } - args[i][j] = 0; + *p++ = 0; i++; }