safer HookMethod and more sandboxed cs mods

This commit is contained in:
Oiltanker
2022-04-17 19:26:54 +03:00
parent 03881f1240
commit e52f762861
2 changed files with 8 additions and 1 deletions

View File

@@ -34,8 +34,10 @@ namespace Barotrauma {
};
private static readonly string[] typesProhibited = new string[] {
//"System.Reflection",
//"System.Type",
"System.IO",
"Moonsharp"
"Moonsharp",
"Barotrauma.IO",
};
public static bool IsTypeAllowed(string name)
{

View File

@@ -215,9 +215,14 @@ namespace Barotrauma
return methodInfo;
}
private static readonly string[] prohibitedHooks = {
"Barotrauma.Lua",
"Barotrauma.Cs"
};
public void HookMethod(string identifier, MethodInfo method, LuaCsPatch patch, HookMethodType hookType = HookMethodType.Before, ACsMod owner = null)
{
if (identifier == null || method == null || patch == null) throw new ArgumentNullException("Identifier, Method and Patch arguments must not be null.");
if (prohibitedHooks.Any(h => method.DeclaringType.FullName.StartsWith(h))) throw new ArgumentException("Hooks into Modding Environment are prohibited.");
var funcAddr = ((long)method.MethodHandle.GetFunctionPointer());
var patches = Harmony.GetPatchInfo(method);