SharpLua icon indicating copy to clipboard operation
SharpLua copied to clipboard

Infinite recursion on gsub

Open sgstair opened this issue 8 years ago • 0 comments

Easy repro: LuaRuntime.Run("var = 'test_string'; print(var:gsub('_','-'));");

Something in the error handling then recurses infinitely until it throws an IndexOutOfRange exception probably related to stack handling problems:

   at SharpLua.Lua.getline(Proto f, Int32 pc)
   at SharpLua.Lua.currentline(LuaState L, CallInfo ci)
   at SharpLua.Lua.addinfo(LuaState L, CharPtr msg)
   at SharpLua.Lua.luaG_runerror(LuaState L, CharPtr fmt, Object[] argp)
   at SharpLua.Lua.luaD_call(LuaState L, lua_TValue func, Int32 nResults)
   at SharpLua.Lua.callTMres(LuaState L, lua_TValue res, lua_TValue f, lua_TValue p1, lua_TValue p2)
   at SharpLua.Lua.luaV_gettable(LuaState L, lua_TValue t, lua_TValue key, lua_TValue val)
   at SharpLua.Lua.luaV_execute(LuaState L, Int32 nexeccalls)
   at SharpLua.Lua.luaD_call(LuaState L, lua_TValue func, Int32 nResults)
   at SharpLua.Lua.f_call(LuaState L, Object ud)
   at SharpLua.Lua.luaD_rawrunprotected(LuaState L, Pfunc f, Object ud)
   at SharpLua.Lua.luaD_pcall(LuaState L, Pfunc func, Object u, Int32 old_top, Int32 ef)
   at SharpLua.Lua.lua_pcall(LuaState L, Int32 nargs, Int32 nresults, Int32 errfunc)
   at SharpLua.Lua.luaB_pcall(LuaState L)
   at SharpLua.Lua.luaD_precall(LuaState L, lua_TValue func, Int32 nresults)
   at SharpLua.Lua.luaV_execute(LuaState L, Int32 nexeccalls)
   at SharpLua.Lua.luaD_call(LuaState L, lua_TValue func, Int32 nResults)
   at SharpLua.Lua.callTMres(LuaState L, lua_TValue res, lua_TValue f, lua_TValue p1, lua_TValue p2)
   at SharpLua.Lua.luaV_gettable(LuaState L, lua_TValue t, lua_TValue key, lua_TValue val)
   at SharpLua.Lua.luaV_execute(LuaState L, Int32 nexeccalls)
   at SharpLua.Lua.luaD_call(LuaState L, lua_TValue func, Int32 nResults)
   at SharpLua.Lua.f_call(LuaState L, Object ud)
   at SharpLua.Lua.luaD_rawrunprotected(LuaState L, Pfunc f, Object ud)
   at SharpLua.Lua.luaD_pcall(LuaState L, Pfunc func, Object u, Int32 old_top, Int32 ef)
   at SharpLua.Lua.lua_pcall(LuaState L, Int32 nargs, Int32 nresults, Int32 errfunc)
...

I've been digging around trying to figure out why, but I don't have any answers yet. I suspect there are two bugs - one in error handling, and one related to gsub with string arguments (which is what led me down this path).

sgstair avatar Nov 12 '17 15:11 sgstair