From 22f82c7cb2f2f0fb157703a9ab477b71c156a31b Mon Sep 17 00:00:00 2001 From: Oiltanker Date: Sun, 17 Apr 2022 19:55:45 +0300 Subject: [PATCH] fix cs filter metadata bug --- .../SharedSource/LuaCs/Cs/CsScriptFilter.cs | 21 +++++++++++-------- .../SharedSource/LuaCs/LuaCsHook.cs | 13 ++++++++++-- 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Cs/CsScriptFilter.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Cs/CsScriptFilter.cs index f06e48083..895d4319d 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Cs/CsScriptFilter.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Cs/CsScriptFilter.cs @@ -11,15 +11,7 @@ namespace Barotrauma { { private static readonly string[] typesPermitted = new string[] { // Basics - "System.Runtime.CompilerServices.CompilationRelaxationsAttribute", - "System.Runtime.CompilerServices.RuntimeCompatibilityAttribute", - "System.Diagnostics.DebuggableAttribute", - "System.Object", - "System.String", - "System.Collections", "System", - // Some roslyn magic - ".DebuggingModes", // Barotrauma "Barotrauma", // Lua @@ -76,7 +68,18 @@ namespace Barotrauma { reader.TypeReferences.ToList().ForEach(t => { var tRef = reader.GetTypeReference(t); - var typeName = $"{reader.GetString(tRef.Namespace)}.{reader.GetString(tRef.Name)}"; + + var typeName = $"{reader.GetString(tRef.Name)}"; + EntityHandle handle = tRef.ResolutionScope; + TypeReference tr = tRef; + while (!handle.IsNil && handle.Kind == HandleKind.TypeReference) + { + tr = reader.GetTypeReference((TypeReferenceHandle)handle); + handle = tr.ResolutionScope; + typeName = $"{reader.GetString(tr.Name)}.{typeName}"; + } + typeName = $"{reader.GetString(tr.Namespace)}.{typeName}"; + if (!IsTypeAllowed(typeName)) conflictingTypes.Add(typeName); }); diff --git a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsHook.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsHook.cs index ecaad266b..60059b925 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsHook.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsHook.cs @@ -6,6 +6,7 @@ using HarmonyLib; using System.Collections.Generic; using System.Text; using MoonSharp.Interpreter.Interop; +using static Barotrauma.LuaCsSetup; namespace Barotrauma { @@ -221,8 +222,16 @@ namespace Barotrauma }; 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."); + if (identifier == null || method == null || patch == null) + { + GameMain.LuaCs.HandleException(new ArgumentNullException("Identifier, Method and Patch arguments must not be null."), exceptionType: ExceptionType.Both); + return; + } + if (prohibitedHooks.Any(h => method.DeclaringType.FullName.StartsWith(h))) + { + GameMain.LuaCs.HandleException(new ArgumentException("Hooks into Modding Environment are prohibited."), exceptionType: ExceptionType.Both); + return; + } var funcAddr = ((long)method.MethodHandle.GetFunctionPointer()); var patches = Harmony.GetPatchInfo(method);