On Sun, Mar 30, 2014 at 11:54 AM, Doug Currie
<doug.currie@gmail.com> wrote:
On Sun, Mar 30, 2014 at 8:55 AM, Paige DePol
<lual@serfnet.org> wrote:
sort.lua fails the assertion at line 31:
assert(not pcall(unpack, {}, 0, 2^31-1))
-- also on OSX 10.9.2...
$ lua
Lua 5.2.3 Copyright (C) 1994-2013 Lua.org, PUC-Rio
> unpack {}
> unpack ({}, 0, 2^31-1)
Segmentation fault: 11
unpack may be fixed in Clang with
// if (n <= 0 || !lua_checkstack(L, n)) /* n <= 0 means arith. overflow */
if (__builtin_sadd_overflow(e - i, 1, &n) || !lua_checkstack(L, n))
Too bad there is no portable simple way to do this. In this case, this would also work:
// n = e - i + 1; /* number of elements */
// if (n <= 0 || !lua_checkstack(L, n)) /* n <= 0 means arith. overflow */
n = e - i; /* number of elements minus one */
if (n > (INT_MAX - 1) || !lua_checkstack(L, n+1)) /* n > (INT_MAX - 1) means arith. overflow */
e