23 lines
643 B
Diff
23 lines
643 B
Diff
|
--- lua-5.1.4.orig/src/lvm.c 2007/12/28 15:32:23 2.63.1.3
|
||
|
+++ lua-5.1.4/src/lvm.c 2009/07/01 20:36:59
|
||
|
@@ -133,6 +133,7 @@
|
||
|
|
||
|
void luaV_settable (lua_State *L, const TValue *t, TValue *key, StkId val) {
|
||
|
int loop;
|
||
|
+ TValue temp;
|
||
|
for (loop = 0; loop < MAXTAGLOOP; loop++) {
|
||
|
const TValue *tm;
|
||
|
if (ttistable(t)) { /* `t' is a table? */
|
||
|
@@ -152,7 +153,9 @@
|
||
|
callTM(L, tm, t, key, val);
|
||
|
return;
|
||
|
}
|
||
|
- t = tm; /* else repeat with `tm' */
|
||
|
+ /* else repeat with `tm' */
|
||
|
+ setobj(L, &temp, tm); /* avoid pointing inside table (may rehash) */
|
||
|
+ t = &temp;
|
||
|
}
|
||
|
luaG_runerror(L, "loop in settable");
|
||
|
}
|
||
|
|