From: Christopher Faulet Date: Thu, 28 Mar 2024 13:52:29 +0000 (+0100) Subject: BUG/MINOR: cli: Report an error to user if command or payload is too big X-Git-Tag: v3.0-dev7~64 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=498520fdf505f05cde2f99c70c4e98fe90098961;p=thirdparty%2Fhaproxy.git BUG/MINOR: cli: Report an error to user if command or payload is too big Too big command, larger than a buffer, was silently rejected by the CLI applet. It was handled as an error and the connection was closed, but no error message was reported to user to notify him. Now an error is reported before closing. It is only displayed if the chunk buffer used by the CLI applet is full and no delimiter (\n or ;) is found to mark the end of the command. It works for a simple command but also for a command with a huge payload. This patch could be backported to all stable versions. --- diff --git a/src/cli.c b/src/cli.c index 89a2227886..7c856bb318 100644 --- a/src/cli.c +++ b/src/cli.c @@ -997,6 +997,11 @@ static void cli_io_handler(struct appctx *appctx) len = reql - 1; if (str[len] != '\n' && str[len] != ';') { se_fl_set(appctx->sedesc, SE_FL_ERROR); + if (reql == appctx->chunk->size - appctx->chunk->data - 1) { + cli_err(appctx, "The command is too big for the buffer size. Please change tune.bufsize in the configuration to use a bigger command.\n"); + co_skip(sc_oc(sc), co_data(sc_oc(sc))); + goto cli_output; + } appctx->st0 = CLI_ST_END; continue; } @@ -1084,7 +1089,7 @@ static void cli_io_handler(struct appctx *appctx) struct cli_print_ctx *ctx; const char *msg; int sev; - + cli_output: switch (appctx->st0) { case CLI_ST_PROMPT: break;