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.
This commit is contained in:
Christopher Faulet 2024-03-28 14:52:29 +01:00
parent e91da1dd8e
commit 498520fdf5

View File

@ -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;