From: Thierry Fournier Date: Thu, 21 Jan 2016 08:28:58 +0000 (+0100) Subject: MINOR: lua: file dedicated to unsafe functions X-Git-Tag: v1.7-dev2~104 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fb0b5467ca9a0b6c33adf2465751b60260c27662;p=thirdparty%2Fhaproxy.git MINOR: lua: file dedicated to unsafe functions When Lua executes functions from its API, these can throws an error. These function must be executed in a special environment which catch these error, otherwise a critical error (like segfault) can raise. This patch add a c file called "hlua_fcn.c" which collect all the Lua/c function needing safe environment for its execution. --- diff --git a/Makefile b/Makefile index 8087eb1576..9acbf2bcc2 100644 --- a/Makefile +++ b/Makefile @@ -610,7 +610,7 @@ OPTIONS_LDFLAGS += $(LUA_LD_FLAGS) -l$(LUA_LIB_NAME) -lm ifneq ($(USE_DL),) OPTIONS_LDFLAGS += -ldl endif -OPTIONS_OBJS += src/hlua.o +OPTIONS_OBJS += src/hlua.o src/hlua_fcn.o endif ifneq ($(USE_DEVICEATLAS),) diff --git a/include/proto/hlua_fcn.h b/include/proto/hlua_fcn.h new file mode 100644 index 0000000000..37d07ffa05 --- /dev/null +++ b/include/proto/hlua_fcn.h @@ -0,0 +1,6 @@ +#ifndef _PROTO_HLUA_FCN_H +#define _PROTO_HLUA_FCN_H + +int hlua_fcn_reg_core_fcn(lua_State *L); + +#endif /* _PROTO_HLUA_FCN_H */ diff --git a/src/hlua.c b/src/hlua.c index 1a31eb267d..b4b8980e55 100644 --- a/src/hlua.c +++ b/src/hlua.c @@ -24,6 +24,7 @@ #include #include #include +#include #include #include #include @@ -6632,6 +6633,7 @@ void hlua_init(void) hlua_class_function(gL.T, "Warning", hlua_log_warning); hlua_class_function(gL.T, "Alert", hlua_log_alert); hlua_class_function(gL.T, "done", hlua_done); + hlua_fcn_reg_core_fcn(gL.T); lua_setglobal(gL.T, "core"); diff --git a/src/hlua_fcn.c b/src/hlua_fcn.c new file mode 100644 index 0000000000..60780319fd --- /dev/null +++ b/src/hlua_fcn.c @@ -0,0 +1,21 @@ +/* All the functions in this file runs with aLua stack, and can + * return with a longjmp. All of these function must be launched + * in an environment able to catch a longjmp, otherwise a + * critical error can be raised. + */ +#include +#include +#include + +static void hlua_array_add_fcn(lua_State *L, const char *name, + int (*function)(lua_State *L)) +{ + lua_pushstring(L, name); + lua_pushcclosure(L, function, 0); + lua_rawset(L, -3); +} + +int hlua_fcn_reg_core_fcn(lua_State *L) +{ + return 0; +}