From 9502afb35b47ca90e52516721abd1ebf273e539e Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Sun, 9 Jan 2011 17:48:25 +0100 Subject: [PATCH] FFI: Preserve stack top across implicit load of FFI library in lexer. --- src/Makefile.dep | 2 +- src/lj_lex.c | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Makefile.dep b/src/Makefile.dep index 9982f7b0..8481b9f0 100644 --- a/src/Makefile.dep +++ b/src/Makefile.dep @@ -97,7 +97,7 @@ lj_ir.o: lj_ir.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h lj_gc.h \ lj_bc.h lj_traceerr.h lj_ctype.h lj_cdata.h lj_lib.h lj_lex.o: lj_lex.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h lj_gc.h \ lj_err.h lj_errmsg.h lj_str.h lj_tab.h lj_ctype.h lj_cdata.h lualib.h \ - lj_lex.h lj_parse.h lj_char.h + lj_state.h lj_lex.h lj_parse.h lj_char.h lj_lib.o: lj_lib.c lauxlib.h lua.h luaconf.h lj_obj.h lj_def.h lj_arch.h \ lj_gc.h lj_err.h lj_errmsg.h lj_str.h lj_tab.h lj_func.h lj_bc.h \ lj_dispatch.h lj_jit.h lj_ir.h lj_vm.h lj_lib.h diff --git a/src/lj_lex.c b/src/lj_lex.c index c97d6e0e..ac0d1e95 100644 --- a/src/lj_lex.c +++ b/src/lj_lex.c @@ -19,6 +19,7 @@ #include "lj_cdata.h" #include "lualib.h" #endif +#include "lj_state.h" #include "lj_lex.h" #include "lj_parse.h" #include "lj_char.h" @@ -87,6 +88,7 @@ static void inclinenumber(LexState *ls) /* Load FFI library on-demand. Needed if we create cdata objects. */ static void lex_loadffi(lua_State *L) { + ptrdiff_t oldtop = savestack(L, L->top); cTValue *tmp; luaopen_ffi(L); tmp = lj_tab_getstr(tabV(registry(L)), lj_str_newlit(L, "_LOADED")); @@ -95,7 +97,7 @@ static void lex_loadffi(lua_State *L) copyTV(L, lj_tab_setstr(L, t, lj_str_newlit(L, "ffi")), L->top-1); lj_gc_anybarriert(L, t); } - L->top--; + L->top = restorestack(L, oldtop); } /* Parse 64 bit integer. */