diff options
| author | Sunil Nimmagadda <sunil@nimmagadda.net> | 2026-10-24 12:37:19 +0530 |
|---|---|---|
| committer | Sunil Nimmagadda <sunil@nimmagadda.net> | 2026-10-24 12:37:19 +0530 |
| commit | 79322511d930fe9b73d257b45c42aa9365b6bab4 (patch) | |
| tree | d44075c1a6d7e44838fae623b250c41c7d700378 | |
| parent | 7be2d3709a9161da93c1e1f6d81a9cdc94040ca3 (diff) | |
Prevent defining globals in config.
| -rw-r--r-- | mkelf.lua | 34 |
1 files changed, 20 insertions, 14 deletions
@@ -17,21 +17,27 @@ local function loadconfig(fn) local header_mt = { __index = elf.header } local segments_mt = { __index = elf.segment } local sections_mt = { __index = elf.section } - local env = { - -- Keep in sync with types/elf.d.lua - Class = elf.Class, - Endian = elf.Endian, - Osabi = elf.Osabi, - Type = elf.Type, - Machine = elf.Machine, - SegmentType = elf.SegmentType, - SegmentFlags = elf.SegmentFlags, - ELFVERSION = elf.VERSION, + local env = setmetatable({}, { + __index = { + -- Keep in sync with types/elf.d.lua + Class = elf.Class, + Endian = elf.Endian, + Osabi = elf.Osabi, + Type = elf.Type, + Machine = elf.Machine, + SegmentType = elf.SegmentType, + SegmentFlags = elf.SegmentFlags, + ELFVERSION = elf.VERSION, - header = function(t) header = setmetatable(t, header_mt) end, - segments = function(t) segments = setmetatable(t, segments_mt) end, - sections = function(t) sections = setmetatable(t, sections_mt) end, - } + header = function(t) header = setmetatable(t, header_mt) end, + segments = function(t) segments = setmetatable(t, segments_mt) end, + sections = function(t) sections = setmetatable(t, sections_mt) end, + }, + __newindex = function(_, name) + error(("may not define global %q"):format(name), 2) + end, + __metatable = false, + }) -- TODO error check for multiple headers local chunk, err = loadfile(fn, "t", env) if not chunk then die("%s", err) end |
