Fix SQLite3 requiring for trusted modlib

master
Lars Mueller 2021-08-09 14:30:55 +02:00
parent eb3a3b2960
commit b8d8d3c4d1
3 changed files with 15 additions and 2 deletions

View File

@ -132,6 +132,12 @@ modlib = setmetatable({
modlib.mod = minetest and dofile(get_resource(modlib.modname, "mod.lua"))
if minetest then
local ie = minetest.request_insecure_environment()
if ie then
-- Force load persistence namespace to pass insecure require
-- TODO currently no need to set _G.require, lsqlite3 loads no dependencies that way
modlib.persistence = assert(loadfile(get_resource"persistence.lua"))(ie.require)
end
modlib.conf.build_setting_tree()
modlib.mod.get_resource = get_resource
end

View File

@ -1,3 +1,4 @@
local require = ... or require
-- TODO consider moving serializers in this namespace
local function load(module_name)
return assert(loadfile(modlib.mod.get_resource(modlib.modname, "persistence", module_name .. ".lua")))
@ -9,7 +10,13 @@ local _ENV = setmetatable({}, {__index = function(_ENV, module_name)
return module
end
if module_name == "sqlite3" then
local module = load(module_name)
local func = load(module_name)
local module = function(sqlite3)
if sqlite3 then
return func(sqlite3)
end
return func(require"lsqlite3")
end
_ENV[module_name] = module
return module
end

View File

@ -1,7 +1,7 @@
local assert, error, math_huge, modlib, minetest, setmetatable, type, table_insert, table_sort, pairs, ipairs
= assert, error, math.huge, modlib, minetest, setmetatable, type, table.insert, table.sort, pairs, ipairs
local sqlite3 = ... or require"lsqlite3"
local sqlite3 = ...
--! experimental