From 0c9bec0d38ed3d2c45d7be4e764a0bcffef98be1 Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Wed, 7 Feb 2024 13:39:54 -0300 Subject: Better handling of size limit when resizing a table Avoid silent conversions from int to unsigned int when calling 'luaH_resize'; avoid silent conversions from lua_Integer to int in 'table.create'; MAXASIZE corrected for the new implementation of arrays; 'luaH_resize' checks explicitly whether new size respects MAXASIZE. (Even constructors were bypassing that check.) --- testes/sort.lua | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) (limited to 'testes') diff --git a/testes/sort.lua b/testes/sort.lua index 7e566a5a..442b3129 100644 --- a/testes/sort.lua +++ b/testes/sort.lua @@ -3,19 +3,30 @@ print "testing (parts of) table library" +local maxI = math.maxinteger +local minI = math.mininteger + + +local function checkerror (msg, f, ...) + local s, err = pcall(f, ...) + assert(not s and string.find(err, msg)) +end + + do print "testing 'table.create'" + local N = 10000 collectgarbage() local m = collectgarbage("count") * 1024 - local t = table.create(10000) + local t = table.create(N) local memdiff = collectgarbage("count") * 1024 - m - assert(memdiff > 10000 * 4) + assert(memdiff > N * 4) for i = 1, 20 do assert(#t == i - 1) t[i] = 0 end for i = 1, 20 do t[#t + 1] = i * 10 end assert(#t == 40 and t[39] == 190) - assert(not T or T.querytab(t) == 10000) + assert(not T or T.querytab(t) == N) t = nil collectgarbage() m = collectgarbage("count") * 1024 @@ -23,6 +34,9 @@ do print "testing 'table.create'" memdiff = collectgarbage("count") * 1024 - m assert(memdiff > 1024 * 12) assert(not T or select(2, T.querytab(t)) == 1024) + + checkerror("table overflow", table.create, (1<<31) + 1) + checkerror("table overflow", table.create, 0, (1<<31) + 1) end @@ -30,15 +44,6 @@ print "testing unpack" local unpack = table.unpack -local maxI = math.maxinteger -local minI = math.mininteger - - -local function checkerror (msg, f, ...) - local s, err = pcall(f, ...) - assert(not s and string.find(err, msg)) -end - checkerror("wrong number of arguments", table.insert, {}, 2, 3, 4) -- cgit v1.2.3-55-g6feb