]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MEDIUM: stick-table: Properly handle "show table" with a data type argument
authorChristopher Faulet <cfaulet@haproxy.com>
Fri, 13 Sep 2019 13:15:56 +0000 (15:15 +0200)
committerChristopher Faulet <cfaulet@haproxy.com>
Fri, 13 Sep 2019 13:46:46 +0000 (15:46 +0200)
Since the commit 1b8e68e8 ("MEDIUM: stick-table: Stop handling stick-tables as
proxies."), the target field into the table context of the CLI applet was not
anymore a pointer to a proxy. It was replaced by a pointer to a stktable. But,
some parts of the code was not updated accordingly. the function
table_prepare_data_request() still tries to cast it to a pointer to a proxy. The
result is totally undefined. With a bit of luck, when the "show table" command
is used with a data type, we failed to find a table and the error "Data type not
stored in this table" is returned. But crashes may also be experienced.

This patch fixes the issue #262. It must be backported to 2.0.

src/stick_table.c

index fe5af7eade804dff38e0aa08bd010c8a5c70355a..3429d047cdaf4d9873ae6064e15cb326020e2c71 100644 (file)
@@ -3556,8 +3556,7 @@ static int table_prepare_data_request(struct appctx *appctx, char **args)
        if (appctx->ctx.table.data_type < 0)
                return cli_err(appctx, "Unknown data type\n");
 
-       if (!((struct proxy *)appctx->ctx.table.target)->table ||
-           !((struct proxy *)appctx->ctx.table.target)->table->data_ofs[appctx->ctx.table.data_type])
+       if (!((struct stktable *)appctx->ctx.table.target)->data_ofs[appctx->ctx.table.data_type])
                return cli_err(appctx, "Data type not stored in this table\n");
 
        appctx->ctx.table.data_op = get_std_op(args[4]);