pbx_lua: Support displaying lua error message if no debug table exists
authorChristof Lauber <christof.lauber@annax.ch>
Wed, 25 Apr 2018 06:57:39 +0000 (08:57 +0200)
committerChristof Lauber <christof.lauber@annax.ch>
Mon, 30 Apr 2018 08:31:34 +0000 (10:31 +0200)
The lua_error_function assumed that lua's debug table and traceback function
are always accessible, which is not the case. This fixes the error message
'Error in the lua error handler' triggred by switch exec() function.
If this happens lua's error message is shown without traceback.

Change-Id: I34ba0a098f1ae06a3af7b4d1b098bd43f42f96c8

pbx/pbx_lua.c

index 741e950..8673dfd 100644 (file)
@@ -805,7 +805,19 @@ static int lua_error_function(lua_State *L)
        lua_pushliteral(L, "\n");
 
        lua_getglobal(L, "debug");
+       if (!lua_istable(L, -1)) {
+               /* Have no 'debug' table for whatever reason */
+               lua_pop(L, 2);
+               /*  Original err message is on stack top now */
+               return 1;
+       }
        lua_getfield(L, -1, "traceback");
+       if (!lua_isfunction(L, -1)) {
+               /* Same here for traceback function */
+               lua_pop(L, 3);
+               /*  Original err message is on stack top now */
+               return 1;
+       }
        lua_remove(L, -2); /* remove the 'debug' table */
 
        lua_pushvalue(L, message_index);