From 4dd0622d0c5f94b46d1e72b75a7c734bfd709e0c Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Thu, 31 May 2012 17:28:45 -0300 Subject: [PATCH] bug in luaL_getsubtable (calling lua_absindex not with original stack) --- lauxlib.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lauxlib.c b/lauxlib.c index 96700fec..5b1ce3d4 100644 --- a/lauxlib.c +++ b/lauxlib.c @@ -1,5 +1,5 @@ /* -** $Id: lauxlib.c,v 1.242 2012/03/19 22:57:14 roberto Exp roberto $ +** $Id: lauxlib.c,v 1.243 2012/04/20 17:05:17 roberto Exp roberto $ ** Auxiliary functions for building Lua libraries ** See Copyright Notice in lua.h */ @@ -520,11 +520,11 @@ LUALIB_API char *luaL_buffinitsize (lua_State *L, luaL_Buffer *B, size_t sz) { LUALIB_API int luaL_ref (lua_State *L, int t) { int ref; - t = lua_absindex(L, t); if (lua_isnil(L, -1)) { lua_pop(L, 1); /* remove from stack */ return LUA_REFNIL; /* `nil' has a unique fixed reference */ } + t = lua_absindex(L, t); lua_rawgeti(L, t, freelist); /* get first free element */ ref = (int)lua_tointeger(L, -1); /* ref = t[freelist] */ lua_pop(L, 1); /* remove it from stack */ @@ -866,8 +866,8 @@ LUALIB_API int luaL_getsubtable (lua_State *L, int idx, const char *fname) { lua_getfield(L, idx, fname); if (lua_istable(L, -1)) return 1; /* table already there */ else { - idx = lua_absindex(L, idx); lua_pop(L, 1); /* remove previous result */ + idx = lua_absindex(L, idx); lua_newtable(L); lua_pushvalue(L, -1); /* copy to be left at top */ lua_setfield(L, idx, fname); /* assign new table to field */