From 4e9a83349a9b523830f79f9632ef777ab0bfcc9d Mon Sep 17 00:00:00 2001 From: Christopher Faulet Date: Fri, 13 Sep 2019 15:15:56 +0200 Subject: [PATCH] BUG/MEDIUM: stick-table: Properly handle "show table" with a data type argument 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 | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/stick_table.c b/src/stick_table.c index fe5af7ead..3429d047c 100644 --- a/src/stick_table.c +++ b/src/stick_table.c @@ -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]);