소스 검색

'cpcall' must ensure correct environment for called function

Roberto Ierusalimschy 16 년 전
부모
커밋
ba21aa8b2b
1개의 변경된 파일5개의 추가작업 그리고 2개의 파일을 삭제
  1. 5 2
      lstate.c

+ 5 - 2
lstate.c

@@ -1,5 +1,5 @@
 /*
-** $Id: lstate.c,v 2.59 2009/09/21 12:09:52 roberto Exp roberto $
+** $Id: lstate.c,v 2.60 2009/09/28 13:50:19 roberto Exp roberto $
 ** Global State
 ** See Copyright Notice in lua.h
 */
@@ -98,7 +98,10 @@ static void freestack (lua_State *L) {
 */
 static int cpcall (lua_State *L) {
   lua_CFunction f = *(lua_CFunction *)lua_touserdata(L, 1);
-  lua_remove(L, 1);
+  lua_remove(L, 1);  /* remove f from stack */
+  /* restore original environment for 'cpcall' */
+  lua_pushvalue(L, LUA_GLOBALSINDEX);
+  lua_replace(L, LUA_ENVIRONINDEX);  
   return f(L);
 }