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.
This commit is contained in:
Thierry Fournier 2016-01-21 09:28:58 +01:00 committed by Willy Tarreau
parent 834421c2d0
commit fb0b5467ca
4 changed files with 30 additions and 1 deletions

View File

@ -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),)

6
include/proto/hlua_fcn.h Normal file
View File

@ -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 */

View File

@ -24,6 +24,7 @@
#include <proto/channel.h>
#include <proto/hdr_idx.h>
#include <proto/hlua.h>
#include <proto/hlua_fcn.h>
#include <proto/map.h>
#include <proto/obj_type.h>
#include <proto/pattern.h>
@ -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");

21
src/hlua_fcn.c Normal file
View File

@ -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 <lauxlib.h>
#include <lua.h>
#include <lualib.h>
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;
}