BUG/MINOR: cli: Guard against NULL messages when using CLI_ST_PRINT_FREE

Some error paths (especially those followed when running out of memory)
can set the error message to NULL. In order to avoid a crash, use a
generic message ("Out of memory") when this case arises.

It should be backported to 1.8.

Signed-off-by: Aurlien Nephtali <aurelien.nephtali@corp.ovh.com>
This commit is contained in:
Aurlien Nephtali 2018-04-16 18:50:19 +02:00 committed by Willy Tarreau
parent 054fbee67a
commit c511b7cc97

View File

@ -625,14 +625,20 @@ static void cli_io_handler(struct appctx *appctx)
else
si_applet_cant_put(si);
break;
case CLI_ST_PRINT_FREE:
if (cli_output_msg(res, appctx->ctx.cli.err, LOG_ERR, cli_get_severity_output(appctx)) != -1) {
case CLI_ST_PRINT_FREE: {
const char *msg = appctx->ctx.cli.err;
if (!msg)
msg = "Out of memory.\n";
if (cli_output_msg(res, msg, LOG_ERR, cli_get_severity_output(appctx)) != -1) {
free(appctx->ctx.cli.err);
appctx->st0 = CLI_ST_PROMPT;
}
else
si_applet_cant_put(si);
break;
}
case CLI_ST_CALLBACK: /* use custom pointer */
if (appctx->io_handler)
if (appctx->io_handler(appctx)) {