From a599e07cc676f55f41a61239e2c965a77f19ff4e Mon Sep 17 00:00:00 2001 From: jyelon Date: Thu, 9 Dec 2021 13:54:44 -0500 Subject: [PATCH] eris: fix subtle GC-related bug in table sequence patch --- luprex/eris-master/src/ltable.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/luprex/eris-master/src/ltable.c b/luprex/eris-master/src/ltable.c index 2e2a3c05..e1e5d9ee 100644 --- a/luprex/eris-master/src/ltable.c +++ b/luprex/eris-master/src/ltable.c @@ -424,12 +424,6 @@ void luaH_resize (lua_State *L, Table *t, int nasize, int nhsize) { /* create new hash part with appropriate size */ setnodevector(L, t, nhsize); nhsize = truesizenode(t); - /* resize the sequence array */ - int oldseqlen = oldasize + oldhsize; - int newseqlen = nasize + nhsize; - if (newseqlen < t->nnkeys) - luaG_runerror(L, "table sequence vector not large enough?"); - luaM_reallocvector(L, t->sequence, oldseqlen, newseqlen, int); /* possibly shrink the array part */ if (nasize < oldasize) { t->sizearray = nasize; @@ -453,6 +447,10 @@ void luaH_resize (lua_State *L, Table *t, int nasize, int nhsize) { /* delete the old node vector */ if (!isdummy(nold)) luaM_freearray(L, nold, cast(size_t, oldhsize)); + /* resize the sequence array */ + int oldseqlen = oldasize + oldhsize; + int newseqlen = nasize + nhsize; + luaM_reallocvector(L, t->sequence, oldseqlen, newseqlen, int); /* recalculate the entire sequence vector */ int total = 0; for (i = nasize - 1; i >= 0; i--) { @@ -699,6 +697,7 @@ void luaH_setnil(Table *t, ANode *anode) { ** barrier and invalidate the TM cache. */ void luaH_setupdate (lua_State *L, Table *t, const TValue *key, TValue *value, const TValue *getres) { + checksequence(t); if (!ttisnil(getres)) { if (ttisnil(value)) { /* replacing a non-nil value with nil */