mirror of
https://github.com/archlinuxarm/PKGBUILDs.git
synced 2024-11-28 22:57:37 +00:00
18 lines
716 B
Diff
18 lines
716 B
Diff
--- src/lbaselib.c (old)
|
|
+++ src/lbaselib.c (new)
|
|
@@ -344,10 +344,12 @@
|
|
luaL_checktype(L, 1, LUA_TTABLE);
|
|
i = luaL_optint(L, 2, 1);
|
|
e = luaL_opt(L, luaL_checkint, 3, luaL_getn(L, 1));
|
|
+ if (i > e) return 0; /* empty range */
|
|
n = e - i + 1; /* number of elements */
|
|
- if (n <= 0) return 0; /* empty range */
|
|
- luaL_checkstack(L, n, "table too big to unpack");
|
|
- for (; i<=e; i++) /* push arg[i...e] */
|
|
+ if (n <= 0 || !lua_checkstack(L, n)) /* n <= 0 means arith. overflow */
|
|
+ return luaL_error(L, "too many results to unpack");
|
|
+ lua_rawgeti(L, 1, i); /* push arg[i] (avoiding overflow problems) */
|
|
+ while (i++ < e) /* push arg[i + 1...e] */
|
|
lua_rawgeti(L, 1, i);
|
|
return n;
|
|
}
|