summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Gavrilov2012-04-16 18:32:12 +0400
committerAlexander Gavrilov2012-04-16 18:32:12 +0400
commitee7100216e7ac43ad51f1cdd5e51d89daa545b91 (patch)
treecb8ea70d0db62e3680b4ed87cd1a2aacecb15b92
parent1e64a6a2f623a6f6a3ce1b0b10ccfe40acbcdde4 (diff)
downloaddfhack-ee7100216e7ac43ad51f1cdd5e51d89daa545b91.tar.gz
dfhack-ee7100216e7ac43ad51f1cdd5e51d89daa545b91.tar.bz2
dfhack-ee7100216e7ac43ad51f1cdd5e51d89daa545b91.tar.xz
Fix lua interpreter bug: the C call counter is already unwound by yield.
Decrementing it causes underflow and subsequent spurious stack overflow.
-rw-r--r--depends/lua/CMakeLists.txt2
-rw-r--r--depends/lua/src/ldo.c4
2 files changed, 3 insertions, 3 deletions
diff --git a/depends/lua/CMakeLists.txt b/depends/lua/CMakeLists.txt
index 3a56aa63..b77bce6f 100644
--- a/depends/lua/CMakeLists.txt
+++ b/depends/lua/CMakeLists.txt
@@ -1,7 +1,7 @@
PROJECT ( lua CXX )
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
-SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-DLUA_USE_APICHECK")
+SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -DLUA_USE_APICHECK")
IF(WIN32)
ADD_DEFINITIONS(-D_CRT_SECURE_NO_DEPRECATE )
diff --git a/depends/lua/src/ldo.c b/depends/lua/src/ldo.c
index 26f9a674..e0f13c44 100644
--- a/depends/lua/src/ldo.c
+++ b/depends/lua/src/ldo.c
@@ -403,7 +403,7 @@ static void finishCcall (lua_State *L) {
lua_assert(ci->u.c.k != NULL); /* must have a continuation */
lua_assert(L->nny == 0);
/* finish 'luaD_call' */
- L->nCcalls--;
+ //L->nCcalls--;
/* finish 'lua_callk' */
adjustresults(L, ci->nresults);
/* call continuation function */
@@ -513,7 +513,7 @@ static void resume (lua_State *L, void *ud) {
api_checknelems(L, n);
firstArg = L->top - n; /* yield results come from continuation */
}
- L->nCcalls--; /* finish 'luaD_call' */
+ //L->nCcalls--; /* finish 'luaD_call' */
luaD_poscall(L, firstArg); /* finish 'luaD_precall' */
}
unroll(L, NULL);