fix cs filter metadata bug

This commit is contained in:
Oiltanker
2022-04-17 19:55:45 +03:00
parent e52f762861
commit 22f82c7cb2
2 changed files with 23 additions and 11 deletions

View File

@@ -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);
});

View File

@@ -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);