Move UserData checks out of Lua

This commit is contained in:
Evil Factory
2026-01-31 17:44:36 -03:00
parent 886eebdbb2
commit 9f1c3fa823
6 changed files with 279 additions and 180 deletions
+11 -73
View File
@@ -1,75 +1,13 @@
if CSActive then
return
if not CSActive then
LuaUserDataIUUD = LuaUserData.RegisterType("Barotrauma.LuaSafeUserData")
LuaUserData = LuaUserData.CreateStatic("Barotrauma.LuaSafeUserData");
for k, v in pairs(debug) do
if k ~= "getmetatable" and k ~= "setmetatable" and k ~= "traceback" then
debug[k] = nil
end
end
end
local function IsAllowed(typeName)
if string.startsWith(typeName, "Barotrauma.Lua") or string.startsWith(typeName, "Barotrauma.Cs") or string.startsWith(typeName, "Barotrauma.LuaCs") then
return false
end
if string.startsWith(typeName, "System.Collections") then return true end
if string.startsWith(typeName, "Microsoft.Xna") then return true end
if string.startsWith(typeName, "Barotrauma.IO") then return false end
if string.startsWith(typeName, "Barotrauma.ToolBox") then return false end
if string.startsWith(typeName, "Barotrauma.SaveUtil") then return false end
if string.startsWith(typeName, "Barotrauma.") then return true end
return false
end
local function CanBeReRegistered(typeName)
if string.startsWith(typeName, "Barotrauma.Lua") or string.startsWith(typeName, "Barotrauma.Cs") or string.startsWith(typeName, "Barotrauma.LuaCs") then
return false
end
return true
end
local originalRegisterType = LuaUserData.RegisterType
LuaUserData.RegisterType = function (typeName)
if not (CanBeReRegistered(typeName) and LuaUserData.IsRegistered(typeName)) and not IsAllowed(typeName) then
error("Couldn't register type " .. typeName .. ".", 2)
end
local success, result = pcall(originalRegisterType, typeName)
if not success then
error(result, 2)
end
return result
end
local originalRegisterGenericType = LuaUserData.RegisterType
LuaUserData.RegisterGenericType = function (typeName, ...)
if not (CanBeReRegistered(typeName) and LuaUserData.IsRegistered(typeName)) and not IsAllowed(typeName) then
error("Couldn't register generic type " .. typeName .. ".", 2)
end
local success, result = pcall(originalRegisterGenericType, typeName, ...)
if not success then
error(result, 2)
end
return result
end
local originalCreateStatic = LuaUserData.CreateStatic
LuaUserData.CreateStatic = function (typeName, addCallMethod)
if not (CanBeReRegistered(typeName) and LuaUserData.IsRegistered(typeName)) and not IsAllowed(typeName) then
error("Couldn't create static type " .. typeName .. ".", 2)
end
local success, result = pcall(originalCreateStatic, typeName, addCallMethod)
if not success then
error(result, 2)
end
return result
end
Descriptors = LuaUserData.__new()
LuaUserDataIUUD = nil