From 09ac38f57bb773a05cb4947e85d9adb93856d8b2 Mon Sep 17 00:00:00 2001 From: Valentine Krasnobaeva Date: Thu, 12 Dec 2024 19:38:38 +0100 Subject: [PATCH] BUG/MINOR: cli: cli_snd_buf: preserve \r\n for payload lines cli_snd_buf() analyzez input line by line. Before this patch it has always scanned a given line for the presence of '\r' followed by '\n'. This is only needed for strings, that contain the commands itself like "show ssl cert\n", "set ssl cert test.pem <<\n". In case of strings, which contain the command's payload, like "-----BEGIN CERTIFICATE-----\r\n", '\r\n' should be preserved as is. This patch fixes the GitHub issue #2818. This patch should be backported in v3.1 and in v3.0. (cherry picked from commit d60c893991699af1103bcdcd33c915885c056559) Signed-off-by: Christopher Faulet --- src/cli.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/cli.c b/src/cli.c index 506e5e4..65ffadb 100644 --- a/src/cli.c +++ b/src/cli.c @@ -962,19 +962,19 @@ size_t cli_snd_buf(struct appctx *appctx, struct buffer *buf, size_t count, unsi if (str[len-1] == '\n') lf = 1; - - /* Remove the trailing \r, if any and add a null byte at the - * end. For normal mode, the trailing \n is removed, but we - * conserve if for payload mode. - */ len--; - if (len && str[len-1] == '\r') - len--; + if (appctx->st1 & APPCTX_CLI_ST1_PAYLOAD) { str[len+1] = '\0'; b_add(&appctx->inbuf, len+1); } else { + /* Remove the trailing \r, if any and add a null byte at the + * end. For normal mode, the trailing \n is removed, but we + * conserve \r\n or \n sequences for payload mode. + */ + if (len && str[len-1] == '\r') + len--; str[len] = '\0'; b_add(&appctx->inbuf, len); } -- 1.7.10.4