mirror of https://github.com/rusefi/lua.git
debug.sethook/gethook may overflow the thread's stack
This commit is contained in:
parent
74897bc52f
commit
3a515df086
46
bugs
46
bugs
|
@ -1636,6 +1636,52 @@ lua.c:
|
||||||
]],
|
]],
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Bug{
|
||||||
|
what = [[debug.sethook/gethook may overflow the thread's stack]],
|
||||||
|
report = [[Ivko Stanilov, on 2008/01/04]],
|
||||||
|
since = [[5.1]],
|
||||||
|
example = [[
|
||||||
|
a = coroutine.create(function() yield() end)
|
||||||
|
coroutine.resume(a)
|
||||||
|
debug.sethook(a) -- may overflow the stack of 'a'
|
||||||
|
]],
|
||||||
|
patch = [[ ]],
|
||||||
|
ldblib.c:
|
||||||
|
@@ -268,12 +268,11 @@
|
||||||
|
count = luaL_optint(L, arg+3, 0);
|
||||||
|
func = hookf; mask = makemask(smask, count);
|
||||||
|
}
|
||||||
|
- gethooktable(L1);
|
||||||
|
- lua_pushlightuserdata(L1, L1);
|
||||||
|
+ gethooktable(L);
|
||||||
|
+ lua_pushlightuserdata(L, L1);
|
||||||
|
lua_pushvalue(L, arg+1);
|
||||||
|
- lua_xmove(L, L1, 1);
|
||||||
|
- lua_rawset(L1, -3); /* set new hook */
|
||||||
|
- lua_pop(L1, 1); /* remove hook table */
|
||||||
|
+ lua_rawset(L, -3); /* set new hook */
|
||||||
|
+ lua_pop(L, 1); /* remove hook table */
|
||||||
|
lua_sethook(L1, func, mask, count); /* set hooks */
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
@@ -288,11 +287,10 @@
|
||||||
|
if (hook != NULL && hook != hookf) /* external hook? */
|
||||||
|
lua_pushliteral(L, "external hook");
|
||||||
|
else {
|
||||||
|
- gethooktable(L1);
|
||||||
|
- lua_pushlightuserdata(L1, L1);
|
||||||
|
- lua_rawget(L1, -2); /* get hook */
|
||||||
|
- lua_remove(L1, -2); /* remove hook table */
|
||||||
|
- lua_xmove(L1, L, 1);
|
||||||
|
+ gethooktable(L);
|
||||||
|
+ lua_pushlightuserdata(L, L1);
|
||||||
|
+ lua_rawget(L, -2); /* get hook */
|
||||||
|
+ lua_remove(L, -2); /* remove hook table */
|
||||||
|
}
|
||||||
|
lua_pushstring(L, unmakemask(mask, buff));
|
||||||
|
lua_pushinteger(L, lua_gethookcount(L1));
|
||||||
|
}
|
||||||
|
|
||||||
Bug{
|
Bug{
|
||||||
what = [[ ]],
|
what = [[ ]],
|
||||||
report = [[ , on ]],
|
report = [[ , on ]],
|
||||||
|
|
Loading…
Reference in New Issue