Skip to content

Infinite recursion on gsub #5

Description

@sgstair

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).

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions