]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MEDIUM: cli: Don't look for payload pattern on empty commands
authorChristopher Faulet <cfaulet@haproxy.com>
Wed, 29 Nov 2023 12:20:59 +0000 (13:20 +0100)
committerChristopher Faulet <cfaulet@haproxy.com>
Wed, 29 Nov 2023 14:09:29 +0000 (15:09 +0100)
A regression was introduced by commit 9431aa0bdf ("BUG/MEDIUM: cli: Don't
look for payload pattern on empty commands").

On empty commands (really empty or containing spaces and tabs), the number of
arguments set to 0. However we look for the payload pattern without checking
it. The result is an access at the index -1 in the argument array. It is of
course invalid.

To fix the issue, we just skip this part when there is no argument. Note that
the empty command is still sent to the worker.

This patch should solve the issue #2365. No backport needed.

src/cli.c

index efc55bc75251ec8d37de98045727c7447f39dcc2..069a2659327b6f728b4c6724cf4e4bd2f610db5b 100644 (file)
--- a/src/cli.c
+++ b/src/cli.c
@@ -2645,11 +2645,10 @@ int pcli_parse_request(struct stream *s, struct channel *req, char **errmsg, int
                *p++ = 0;
                i++;
        }
-
        argl = i;
 
        /* first look for '<<' at the beginning of the last argument */
-       if (strncmp(args[argl-1], PAYLOAD_PATTERN, strlen(PAYLOAD_PATTERN)) == 0) {
+       if (argl && strncmp(args[argl-1], PAYLOAD_PATTERN, strlen(PAYLOAD_PATTERN)) == 0) {
                size_t pat_len = strlen(args[argl-1] + strlen(PAYLOAD_PATTERN));
 
                /*