From: Christopher Faulet Date: Tue, 20 Feb 2024 15:37:11 +0000 (+0100) Subject: MINOR: cli: Remove useless loop on commands to find unescaped semi-colon X-Git-Tag: v3.0-dev4~6 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e018e8a4195845eb13fced1b6590bf1283bb375c;p=thirdparty%2Fhaproxy.git MINOR: cli: Remove useless loop on commands to find unescaped semi-colon This loop was added to detect pipelined commands when only co_getline() was used to get commands. Now, co_getdelim() is used and the semi-colon is also considered as a command delimiter. As side effet, the last semi-colon, if any, is no longer replaced by a newline. Thus, we must take care to adapt the test to detect partial commands. --- diff --git a/src/cli.c b/src/cli.c index 1d45374113..52a8d2651f 100644 --- a/src/cli.c +++ b/src/cli.c @@ -987,29 +987,13 @@ static void cli_io_handler(struct appctx *appctx) continue; } - if (!(appctx->st1 & APPCTX_CLI_ST1_PAYLOAD)) { - /* seek for a possible unescaped semi-colon. If we find - * one, we replace it with an LF and skip only this part. - */ - for (len = 0; len < reql; len++) { - if (str[len] == '\\') { - len++; - continue; - } - if (str[len] == ';') { - str[len] = '\n'; - reql = len + 1; - break; - } - } - } /* now it is time to check that we have a full line, * remove the trailing \n and possibly \r, then cut the * line. */ len = reql - 1; - if (str[len] != '\n') { + if (str[len] != '\n' && str[len] != ';') { se_fl_set(appctx->sedesc, SE_FL_ERROR); appctx->st0 = CLI_ST_END; continue;