mirror of
https://github.com/lua/lua
synced 2024-11-22 04:41:23 +03:00
Corrected bug in 'luaD_tryfuncTM'
The pointer to the metamethod can be invalidated by a finalizer that
can run during a GC in 'checkstackGCp'. (This commit also fixes a
detail in the manual.) Bug introduced in commit 91673a8ec
.
This commit is contained in:
parent
e8deac5a41
commit
6b3e116d44
3
ldo.c
3
ldo.c
@ -388,9 +388,10 @@ static void rethook (lua_State *L, CallInfo *ci, int nres) {
|
||||
** an error if there is no '__call' metafield.
|
||||
*/
|
||||
StkId luaD_tryfuncTM (lua_State *L, StkId func) {
|
||||
const TValue *tm = luaT_gettmbyobj(L, s2v(func), TM_CALL);
|
||||
const TValue *tm;
|
||||
StkId p;
|
||||
checkstackGCp(L, 1, func); /* space for metamethod */
|
||||
tm = luaT_gettmbyobj(L, s2v(func), TM_CALL); /* (after previous GC) */
|
||||
if (l_unlikely(ttisnil(tm)))
|
||||
luaG_callerror(L, s2v(func)); /* nothing to call */
|
||||
for (p = L->top; p > func; p--) /* open space for metamethod */
|
||||
|
@ -6247,7 +6247,7 @@ to its caller.
|
||||
}
|
||||
|
||||
@LibEntry{error (message [, level])|
|
||||
Raises an error @see{error} with @{message} as the error object.
|
||||
Raises an error @see{error} with @id{message} as the error object.
|
||||
This function never returns.
|
||||
|
||||
Usually, @id{error} adds some information about the error position
|
||||
|
Loading…
Reference in New Issue
Block a user