mirror of
https://github.com/bryanthaboi/gen1recomp.git
synced 2026-08-27 00:48:32 +02:00
38 lines
1.5 KiB
Lua
38 lines
1.5 KiB
Lua
-- Restricted generated-data grammar and resource limits.
|
|
package.path = "./?.lua;./?/init.lua;" .. package.path
|
|
local T = require("tests.modkit")
|
|
local SaveSerializer = require("src.core.SaveSerializer")
|
|
|
|
local limits = {
|
|
allowArray = true, allowComments = true,
|
|
maxBytes = 256, maxDepth = 4, maxNodes = 7,
|
|
maxStringBytes = 8, maxTableEntries = 5, rootName = "generated data",
|
|
}
|
|
|
|
local value, err = SaveSerializer.decode(
|
|
'-- Generated by tools/build_data.py. DO NOT EDIT.\n'
|
|
.. 'return { rows = { "A", "B" }, [3] = true }\n', limits)
|
|
T.same(value, { rows = { "A", "B" }, [3] = true },
|
|
"LuaWriter array and keyed-table grammar decodes as data")
|
|
T.eq(err, nil, "valid generated data has no error")
|
|
|
|
local invalid = {
|
|
{ "return function() end", "function literal" },
|
|
{ "owned = true; return {}", "global assignment" },
|
|
{ "return {}; print('x')", "trailing executable syntax" },
|
|
{ string.char(27) .. "Lua", "binary chunk" },
|
|
{ "return " .. string.rep(" ", 260) .. "{}", "source-size limit" },
|
|
{ 'return { a = { b = { c = { d = { e = {} } } } } }', "depth limit" },
|
|
{ 'return { a = "123456789" }', "string limit" },
|
|
{ 'return { 1, 2, 3, 4, 5, 6 }', "table-entry limit" },
|
|
{ 'return { a = 1, b = 2, c = 3, d = 4, e = { f = 6, g = 7 } }',
|
|
"node limit" },
|
|
{ "return 7", "non-table root" },
|
|
}
|
|
for _, row in ipairs(invalid) do
|
|
local got = SaveSerializer.decode(row[1], limits)
|
|
T.eq(got, nil, row[2] .. " fails closed")
|
|
end
|
|
|
|
T.finish("generated_data_decoder")
|