From: Willy Tarreau Date: Mon, 15 Oct 2018 09:55:18 +0000 (+0200) Subject: BUILD: lua: silence some compiler warnings about potential null derefs X-Git-Tag: v1.9-dev4~45 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f1ffb39b614b0d9654c9450ac6e8c88cfc942784;p=thirdparty%2Fhaproxy.git BUILD: lua: silence some compiler warnings about potential null derefs These ones are on error paths that are properly handled by luaL_error() which does a longjmp() but the compiler cannot know it. By adding an __unreachable() statement in WILL_LJMP(), there is no ambiguity anymore. This may be backported to 1.8 but the previous patch (BUILD: compiler: add a new statement "__unreachable()") is needed for this. --- diff --git a/src/hlua.c b/src/hlua.c index aaa884073d..fe7c9097a4 100644 --- a/src/hlua.c +++ b/src/hlua.c @@ -25,6 +25,7 @@ #include #include +#include #include #include @@ -67,7 +68,7 @@ * MAY_LJMP() marks an lua function that may use longjmp. */ #define __LJMP -#define WILL_LJMP(func) func +#define WILL_LJMP(func) do { func; __unreachable(); } while (0) #define MAY_LJMP(func) func /* This couple of function executes securely some Lua calls outside of @@ -2361,7 +2362,7 @@ __LJMP static int hlua_socket_connect_yield(struct lua_State *L, int status, lua return 2; } - appctx = objt_appctx(s->si[0].end); + appctx = __objt_appctx(s->si[0].end); /* Check for connection established. */ if (appctx->ctx.hlua_cosocket.connected) { @@ -2473,7 +2474,7 @@ __LJMP static int hlua_socket_connect(struct lua_State *L) } hlua = hlua_gethlua(L); - appctx = objt_appctx(s->si[0].end); + appctx = __objt_appctx(s->si[0].end); /* inform the stream that we want to be notified whenever the * connection completes. @@ -5723,6 +5724,9 @@ static int hlua_register_task(lua_State *L) WILL_LJMP(luaL_error(L, "Lua out of memory error.")); task = task_new(MAX_THREADS_MASK); + if (!task) + WILL_LJMP(luaL_error(L, "Lua out of memory error.")); + task->context = hlua; task->process = hlua_process_task;