summaryrefslogtreecommitdiff
path: root/external/mit/lua
diff options
context:
space:
mode:
authorlneto <lneto@NetBSD.org>2016-01-28 17:23:21 +0000
committerlneto <lneto@NetBSD.org>2016-01-28 17:23:21 +0000
commit31f1b2669698d21bca2dfe4d02686d42912e7f8c (patch)
tree35f35e88b06df904ff70e4d0abe9c85a0135c109 /external/mit/lua
parentc5ea2254a2d7af69c28be8f70f467222afde648d (diff)
fixed metatable access to deallocated field
author: Lua.org <team@lua.org> see: http://www.lua.org/bugs.html#5.3.2-1
Diffstat (limited to 'external/mit/lua')
-rw-r--r--external/mit/lua/dist/src/lvm.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/external/mit/lua/dist/src/lvm.c b/external/mit/lua/dist/src/lvm.c
index 60b39e743db..07e60e67f05 100644
--- a/external/mit/lua/dist/src/lvm.c
+++ b/external/mit/lua/dist/src/lvm.c
@@ -1,4 +1,4 @@
-/* $NetBSD: lvm.c,v 1.9 2016/01/28 14:41:39 lneto Exp $ */
+/* $NetBSD: lvm.c,v 1.10 2016/01/28 17:23:21 lneto Exp $ */
/*
** Id: lvm.c,v 2.265 2015/11/23 11:30:45 roberto Exp
@@ -203,18 +203,19 @@ void luaV_finishset (lua_State *L, const TValue *t, TValue *key,
for (loop = 0; loop < MAXTAGLOOP; loop++) {
const TValue *tm;
if (oldval != NULL) {
- lua_assert(ttistable(t) && ttisnil(oldval));
+ Table *h = hvalue(t); /* save 't' table */
+ lua_assert(ttisnil(oldval));
/* must check the metamethod */
- if ((tm = fasttm(L, hvalue(t)->metatable, TM_NEWINDEX)) == NULL &&
+ if ((tm = fasttm(L, h->metatable, TM_NEWINDEX)) == NULL &&
/* no metamethod; is there a previous entry in the table? */
(oldval != luaO_nilobject ||
/* no previous entry; must create one. (The next test is
always true; we only need the assignment.) */
- (oldval = luaH_newkey(L, hvalue(t), key), 1))) {
+ (oldval = luaH_newkey(L, h, key), 1))) {
/* no metamethod and (now) there is an entry with given key */
setobj2t(L, cast(TValue *, oldval), val);
- invalidateTMcache(hvalue(t));
- luaC_barrierback(L, hvalue(t), val);
+ invalidateTMcache(h);
+ luaC_barrierback(L, h, val);
return;
}
/* else will try the metamethod */