1
0
mirror of http://git.haproxy.org/git/haproxy.git/ synced 2025-05-16 14:48:03 +00:00

BUG/MINOR: cli: don't call the kw->io_release if kw->parse failed

The io_release() callback of the cli_kw is supposed to be used to clean
what an io_handler() has made. It is called once the work in the IO
handler is finished, or when the connection was aborted by the client.

This patch fixes a bug where the io_release callback was called even
when the parse() callback failed. Which means that the io_release() could
called even if the io_handler() was not called.

Should be backported in every versions that have a cli_kw->release().
(as far as 1.7)
This commit is contained in:
William Lallemand 2019-10-25 21:10:14 +02:00 committed by William Lallemand
parent c70df53250
commit 90b098c921

View File

@ -577,10 +577,19 @@ static int cli_parse_request(struct appctx *appctx)
appctx->io_handler = kw->io_handler;
appctx->io_release = kw->io_release;
/* kw->parse could set its own io_handler or ip_release handler */
if ((!kw->parse || kw->parse(args, payload, appctx, kw->private) == 0) && appctx->io_handler) {
appctx->st0 = CLI_ST_CALLBACK;
}
if (kw->parse && kw->parse(args, payload, appctx, kw->private) != 0)
goto fail;
/* kw->parse could set its own io_handler or io_release handler */
if (!appctx->io_handler)
goto fail;
appctx->st0 = CLI_ST_CALLBACK;
return 1;
fail:
appctx->io_handler = NULL;
appctx->io_release = NULL;
return 1;
}