From: Christopher Faulet Date: Fri, 13 Sep 2019 13:15:56 +0000 (+0200) Subject: BUG/MEDIUM: stick-table: Properly handle "show table" with a data type argument X-Git-Tag: v2.1-dev2~81 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4e9a83349a9b523830f79f9632ef777ab0bfcc9d;p=thirdparty%2Fhaproxy.git 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. --- diff --git a/src/stick_table.c b/src/stick_table.c index fe5af7eade..3429d047cd 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]);