From fe249c3df53127d53d55c3fda8e6be7f22cfa58b Mon Sep 17 00:00:00 2001 From: William Lallemand Date: Thu, 18 Jun 2020 18:03:57 +0200 Subject: [PATCH] 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. --- src/cli.c | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/src/cli.c b/src/cli.c index 5912e21b0..36438c7ca 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++; }