]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: cli: Remove useless loop on commands to find unescaped semi-colon
authorChristopher Faulet <cfaulet@haproxy.com>
Tue, 20 Feb 2024 15:37:11 +0000 (16:37 +0100)
committerChristopher Faulet <cfaulet@haproxy.com>
Fri, 23 Feb 2024 14:19:49 +0000 (15:19 +0100)
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.

src/cli.c

index 1d45374113a0321856f76e5d0a083a86c1d29159..52a8d2651f885fa49a0715cc7d3ede19c238d761 100644 (file)
--- 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;