]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: lua: memleak when Lua/cli fails
authorThierry FOURNIER <thierry.fournier@ozon.io>
Sat, 17 Dec 2016 11:09:51 +0000 (12:09 +0100)
committerWilly Tarreau <w@1wt.eu>
Wed, 21 Dec 2016 14:24:35 +0000 (15:24 +0100)
If the memory allocator fails, it return a bad code, and the execution
continue. If the Lua/cli initializer fails, the allocated struct is not
released.

src/hlua.c

index 326f723b447abd54c0b857aeeed5fb90de257c1c..a79bf1e508f631327ee59b271e07547cd4c6952a 100644 (file)
@@ -6665,7 +6665,7 @@ static int hlua_cli_parse_fct(char **args, struct appctx *appctx, void *private)
        hlua = pool_alloc2(pool2_hlua);
        if (!hlua) {
                SEND_ERR(NULL, "Lua cli '%s': out of memory.\n", fcn->name);
-               return 0;
+               return 1;
        }
        HLUA_INIT(hlua);
        appctx->ctx.hlua_cli.hlua = hlua;
@@ -6677,7 +6677,7 @@ static int hlua_cli_parse_fct(char **args, struct appctx *appctx, void *private)
        appctx->ctx.hlua_cli.task = task_new();
        if (!appctx->ctx.hlua_cli.task) {
                SEND_ERR(NULL, "Lua cli '%s': out of memory.\n", fcn->name);
-               return 1;
+               goto error;
        }
        appctx->ctx.hlua_cli.task->nice = 0;
        appctx->ctx.hlua_cli.task->context = appctx;
@@ -6686,7 +6686,7 @@ static int hlua_cli_parse_fct(char **args, struct appctx *appctx, void *private)
        /* Initialises the Lua context */
        if (!hlua_ctx_init(hlua, appctx->ctx.hlua_cli.task)) {
                SEND_ERR(NULL, "Lua cli '%s': can't initialize Lua context.\n", fcn->name);
-               return 1;
+               goto error;
        }
 
        /* The following Lua calls can fail. */
@@ -6741,6 +6741,8 @@ static int hlua_cli_parse_fct(char **args, struct appctx *appctx, void *private)
 error:
        RESET_SAFE_LJMP(hlua->T);
        hlua_ctx_destroy(hlua);
+       pool_free2(pool2_hlua, hlua);
+       appctx->ctx.hlua_cli.hlua = NULL;
        return 1;
 }