1 From 49d319a677432b69c6a69ef5331ae2ed592075c9 Mon Sep 17 00:00:00 2001
2 From: Thierry FOURNIER <thierry.fournier@ozon.io>
3 Date: Wed, 12 Jul 2017 13:41:33 +0200
4 Subject: [PATCH 03/18] BUG/MINOR: lua: executes the function destroying the
5 Lua session in safe mode
7 When we destroy the Lua session, we manipulates Lua stack,
8 so errors can raises. It will be better to catch these errors.
10 This patch should be backported in 1.6 and 1.7
11 (cherry picked from commit 75d0208009c3189b5d10793e08f27dd62a76c3ae)
13 Signed-off-by: Willy Tarreau <w@1wt.eu>
15 src/hlua.c | 17 +++++++++++++++--
16 1 file changed, 15 insertions(+), 2 deletions(-)
18 diff --git a/src/hlua.c b/src/hlua.c
19 index 4c1c2d21..2d312804 100644
22 @@ -876,9 +876,15 @@ void hlua_ctx_destroy(struct hlua *lua)
23 /* Purge all the pending signals. */
26 + if (!SET_SAFE_LJMP(lua->T))
28 luaL_unref(lua->T, LUA_REGISTRYINDEX, lua->Mref);
29 - luaL_unref(gL.T, LUA_REGISTRYINDEX, lua->Tref);
30 + RESET_SAFE_LJMP(lua->T);
32 + if (!SET_SAFE_LJMP(gL.T))
34 + luaL_unref(gL.T, LUA_REGISTRYINDEX, lua->Tref);
35 + RESET_SAFE_LJMP(gL.T);
36 /* Forces a garbage collecting process. If the Lua program is finished
37 * without error, we run the GC on the thread pointer. Its freed all
39 @@ -889,9 +895,16 @@ void hlua_ctx_destroy(struct hlua *lua)
40 * the garbage collection.
42 if (lua->flags & HLUA_MUST_GC) {
43 + if (!SET_SAFE_LJMP(lua->T))
45 lua_gc(lua->T, LUA_GCCOLLECT, 0);
46 - if (lua_status(lua->T) != LUA_OK)
47 + RESET_SAFE_LJMP(lua->T);
48 + if (lua_status(lua->T) != LUA_OK) {
49 + if (!SET_SAFE_LJMP(gL.T))
51 lua_gc(gL.T, LUA_GCCOLLECT, 0);
52 + RESET_SAFE_LJMP(gL.T);