23 lines
918 B
Diff
23 lines
918 B
Diff
|
diff -up lua-5.4.0/src/ldo.c.CVE-2020-24342 lua-5.4.0/src/ldo.c
|
||
|
--- lua-5.4.0/src/ldo.c.CVE-2020-24342 2020-09-02 14:56:36.939443912 -0400
|
||
|
+++ lua-5.4.0/src/ldo.c 2020-09-02 14:57:47.765341519 -0400
|
||
|
@@ -515,14 +515,13 @@ void luaD_call (lua_State *L, StkId func
|
||
|
|
||
|
/*
|
||
|
** Similar to 'luaD_call', but does not allow yields during the call.
|
||
|
-** If there is a stack overflow, freeing all CI structures will
|
||
|
-** force the subsequent call to invoke 'luaE_extendCI', which then
|
||
|
-** will raise any errors.
|
||
|
*/
|
||
|
void luaD_callnoyield (lua_State *L, StkId func, int nResults) {
|
||
|
incXCcalls(L);
|
||
|
- if (getCcalls(L) <= CSTACKERR) /* possible stack overflow? */
|
||
|
- luaE_freeCI(L);
|
||
|
+ if (getCcalls(L) <= CSTACKERR) { /* possible C stack overflow? */
|
||
|
+ luaE_exitCcall(L); /* to compensate decrement in next call */
|
||
|
+ luaE_enterCcall(L); /* check properly */
|
||
|
+ }
|
||
|
luaD_call(L, func, nResults);
|
||
|
decXCcalls(L);
|
||
|
}
|