Browse Source

Make struct.unpack wrapped in setlist actually work (#1486)

Fixes #1434.
Philip Gladstone 7 years ago
parent
commit
99cd2177bb
2 changed files with 2 additions and 2 deletions
  1. 1 1
      app/lua/lvm.c
  2. 1 1
      app/modules/struct.c

+ 1 - 1
app/lua/lvm.c

@@ -759,7 +759,6 @@ void luaV_execute (lua_State *L, int nexeccalls) {
         fixedstack(L);
         if (n == 0) {
           n = cast_int(L->top - ra) - 1;
-          L->top = L->ci->top;
         }
         if (c == 0) c = cast_int(*pc++);
         runtime_check(L, ttistable(ra));
@@ -772,6 +771,7 @@ void luaV_execute (lua_State *L, int nexeccalls) {
           setobj2t(L, luaH_setnum(L, h, last--), val);
           luaC_barriert(L, h, val);
         }
+	L->top = L->ci->top;
         unfixedstack(L);
         continue;
       }

+ 1 - 1
app/modules/struct.c

@@ -309,7 +309,7 @@ static int b_unpack (lua_State *L) {
     size_t size = optsize(L, opt, &fmt);
     pos += gettoalign(pos, &h, opt, size);
     luaL_argcheck(L, pos+size <= ld, 2, "data string too short");
-    luaL_checkstack(L, 1, "too many results");
+    luaL_checkstack(L, 2, "too many results");
     switch (opt) {
       case 'b': case 'B': case 'h': case 'H':
       case 'l': case 'L': case 'T': case 'i':  case 'I': {  /* integer types */