#endif
#define LUACONTEXT_GLOBAL_EQ "e5ddced079fc405aa4937b386ca387d2"
+#define LUACONTEXT_DEBUG_TRACEBACK "8d143f0add7ad7fa323d0d1d12f3f114" // I would prefer a lightuserdata in the registry index
#define EQ_FUNCTION_NAME "__eq"
#define TOSTRING_FUNCTION_NAME "__tostring"
if (openDefaultLibs)
luaL_openlibs(mState);
- writeGlobalEq();
+ writeGlobalEq();
+ lua_pushliteral(mState, LUACONTEXT_DEBUG_TRACEBACK); // ref
+ lua_getglobal(mState, "debug"); // ref, debug
+ lua_getfield(mState, -1, "traceback"); // ref, debug, traceback
+ lua_remove(mState, -2); // ref, traceback
+ lua_settable(mState, LUA_REGISTRYINDEX); // []
}
void writeGlobalEq() {
}
static int gettraceback(lua_State* L) {
- lua_getglobal(L, "debug"); // stack: error, debug library
- lua_getfield(L, -1, "traceback"); // stack: error, debug library, debug.traceback function
- lua_remove(L, -2); // stack: error, debug.traceback function
+ lua_pushliteral(L, LUACONTEXT_DEBUG_TRACEBACK); // stack: error, ref
+ lua_rawget(L, LUA_REGISTRYINDEX); // stack: error, debug.traceback
lua_pushstring(L, ""); // stack: error, debug.traceback, ""
lua_pushinteger(L, 2); // stack: error, debug.traceback, "", 2
lua_call(L, 2, 1); // stack: error, traceback
sender = getattr(self, method)
(_, receivedResponse) = sender(query, response=response)
self.assertEqual(receivedResponse, response)
+
+class TestLuaError(DNSDistTest):
+ _consoleKey = DNSDistTest.generateConsoleKey()
+ _consoleKeyB64 = base64.b64encode(_consoleKey).decode('ascii')
+
+ _config_params = ['_consoleKeyB64', '_consolePort']
+ _config_template = """
+ setKey("%s")
+ controlSocket("127.0.0.1:%s")
+
+ debug = nil
+ """
+
+ def testLuaError(self):
+ """
+ LuaError: Test exception handling while debug module is obscured
+ """
+ res = self.sendConsoleCommand('error("expected" .. " " .. "error")')
+ self.assertIn('expected error', res)