fix cs filter metadata bug

This commit is contained in:
Oiltanker
2022-04-17 19:55:45 +03:00
parent e52f762861
commit 7458108fc0
2 changed files with 23 additions and 13 deletions
@@ -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
@@ -33,8 +25,6 @@ namespace Barotrauma {
"MoonSharp.Interpreter.DataType",
};
private static readonly string[] typesProhibited = new string[] {
//"System.Reflection",
//"System.Type",
"System.IO",
"Moonsharp",
"Barotrauma.IO",
@@ -76,7 +66,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);
});
@@ -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);