From 3301f3e5cdecf2439762a678c1c2e9846a41e0f6 Mon Sep 17 00:00:00 2001 From: William Lallemand Date: Thu, 13 Dec 2018 09:05:48 +0100 Subject: [PATCH] BUG/MEDIUM: cli: handle correctly prefix and payload In the master CLI, the commands and the prefix were still parsed and trimmed after the pattern payload. Don't parse anything but the end of a line till we are in payload mode. Put the search of the pattern after the trim so we can use correctly a payload with a command which is prefixed by @. --- src/cli.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/cli.c b/src/cli.c index 2299c1cf8..d75955d15 100644 --- a/src/cli.c +++ b/src/cli.c @@ -1933,16 +1933,9 @@ int pcli_parse_request(struct stream *s, struct channel *req, char **errmsg, int return -1; } - /* last line of the payload */ - if ((s->pcli_flags & PCLI_F_PAYLOAD) && (reql == 1)) { - s->pcli_flags &= ~PCLI_F_PAYLOAD; - return reql; - } - - payload = strstr(p, PAYLOAD_PATTERN); - if ((end - 1) == (payload + strlen(PAYLOAD_PATTERN))) { - /* if the payload pattern is at the end */ - s->pcli_flags |= PCLI_F_PAYLOAD; + if (s->pcli_flags & PCLI_F_PAYLOAD) { + if (reql == 1) /* last line of the payload */ + s->pcli_flags &= ~PCLI_F_PAYLOAD; return reql; } @@ -1986,12 +1979,19 @@ int pcli_parse_request(struct stream *s, struct channel *req, char **errmsg, int /* End of words are ending by \0, we need to replace the \0s by spaces 1 before forwarding them */ p = str; - while (p < end) { + while (p < end-1) { if (*p == '\0') *p = ' '; p++; } + payload = strstr(str, PAYLOAD_PATTERN); + if ((end - 1) == (payload + strlen(PAYLOAD_PATTERN))) { + /* if the payload pattern is at the end */ + s->pcli_flags |= PCLI_F_PAYLOAD; + ret = reql; + } + *(end-1) = '\n'; if (wtrim > 0) {