Added more checks in case metadata is invalid
This commit is contained in:
parent
cf32fa3f61
commit
75752f7388
|
@ -321,7 +321,7 @@ namespace AssemblyData.methodsrewriter {
|
||||||
else if (obj is Type)
|
else if (obj is Type)
|
||||||
ilg.Emit(opcode, (Type)obj);
|
ilg.Emit(opcode, (Type)obj);
|
||||||
else
|
else
|
||||||
throw new ApplicationException(string.Format("Unknown type: {0}", obj.GetType()));
|
throw new ApplicationException(string.Format("Unknown type: {0}", (obj == null ? obj : obj.GetType())));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case OperandType.InlineArg:
|
case OperandType.InlineArg:
|
||||||
|
|
|
@ -65,6 +65,8 @@ namespace AssemblyData.methodsrewriter {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static MType getType(TypeReference typeReference) {
|
public static MType getType(TypeReference typeReference) {
|
||||||
|
if (typeReference == null)
|
||||||
|
return null;
|
||||||
var module = getModule(typeReference.Scope);
|
var module = getModule(typeReference.Scope);
|
||||||
if (module != null)
|
if (module != null)
|
||||||
return module.getType(typeReference);
|
return module.getType(typeReference);
|
||||||
|
@ -72,6 +74,8 @@ namespace AssemblyData.methodsrewriter {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static MMethod getMethod(MethodReference methodReference) {
|
public static MMethod getMethod(MethodReference methodReference) {
|
||||||
|
if (methodReference == null)
|
||||||
|
return null;
|
||||||
var module = getModule(methodReference.DeclaringType.Scope);
|
var module = getModule(methodReference.DeclaringType.Scope);
|
||||||
if (module != null)
|
if (module != null)
|
||||||
return module.getMethod(methodReference);
|
return module.getMethod(methodReference);
|
||||||
|
@ -79,6 +83,8 @@ namespace AssemblyData.methodsrewriter {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static MField getField(FieldReference fieldReference) {
|
public static MField getField(FieldReference fieldReference) {
|
||||||
|
if (fieldReference == null)
|
||||||
|
return null;
|
||||||
var module = getModule(fieldReference.DeclaringType.Scope);
|
var module = getModule(fieldReference.DeclaringType.Scope);
|
||||||
if (module != null)
|
if (module != null)
|
||||||
return module.getField(fieldReference);
|
return module.getField(fieldReference);
|
||||||
|
@ -86,7 +92,9 @@ namespace AssemblyData.methodsrewriter {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static object getRtObject(MemberReference memberReference) {
|
public static object getRtObject(MemberReference memberReference) {
|
||||||
if (memberReference is TypeReference)
|
if (memberReference == null)
|
||||||
|
return null;
|
||||||
|
else if (memberReference is TypeReference)
|
||||||
return getRtType((TypeReference)memberReference);
|
return getRtType((TypeReference)memberReference);
|
||||||
else if (memberReference is FieldReference)
|
else if (memberReference is FieldReference)
|
||||||
return getRtField((FieldReference)memberReference);
|
return getRtField((FieldReference)memberReference);
|
||||||
|
@ -129,6 +137,8 @@ namespace AssemblyData.methodsrewriter {
|
||||||
}
|
}
|
||||||
|
|
||||||
static Type resolve(TypeReference typeReference) {
|
static Type resolve(TypeReference typeReference) {
|
||||||
|
if (typeReference == null)
|
||||||
|
return null;
|
||||||
var elemType = typeReference.GetElementType();
|
var elemType = typeReference.GetElementType();
|
||||||
var resolver = getAssemblyResolver(elemType.Scope);
|
var resolver = getAssemblyResolver(elemType.Scope);
|
||||||
var resolvedType = resolver.resolve(elemType);
|
var resolvedType = resolver.resolve(elemType);
|
||||||
|
@ -138,6 +148,8 @@ namespace AssemblyData.methodsrewriter {
|
||||||
}
|
}
|
||||||
|
|
||||||
static FieldInfo resolve(FieldReference fieldReference) {
|
static FieldInfo resolve(FieldReference fieldReference) {
|
||||||
|
if (fieldReference == null)
|
||||||
|
return null;
|
||||||
var resolver = getAssemblyResolver(fieldReference.DeclaringType.Scope);
|
var resolver = getAssemblyResolver(fieldReference.DeclaringType.Scope);
|
||||||
var fieldInfo = resolver.resolve(fieldReference);
|
var fieldInfo = resolver.resolve(fieldReference);
|
||||||
if (fieldInfo != null)
|
if (fieldInfo != null)
|
||||||
|
@ -146,6 +158,8 @@ namespace AssemblyData.methodsrewriter {
|
||||||
}
|
}
|
||||||
|
|
||||||
static MethodBase resolve(MethodReference methodReference) {
|
static MethodBase resolve(MethodReference methodReference) {
|
||||||
|
if (methodReference == null)
|
||||||
|
return null;
|
||||||
var resolver = getAssemblyResolver(methodReference.DeclaringType.Scope);
|
var resolver = getAssemblyResolver(methodReference.DeclaringType.Scope);
|
||||||
var methodBase = resolver.resolve(methodReference);
|
var methodBase = resolver.resolve(methodReference);
|
||||||
if (methodBase != null)
|
if (methodBase != null)
|
||||||
|
|
|
@ -270,7 +270,8 @@ namespace de4dot.blocks {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool verifyType(TypeReference typeReference, string assembly, string type, string extra = "") {
|
public static bool verifyType(TypeReference typeReference, string assembly, string type, string extra = "") {
|
||||||
return MemberReferenceHelper.getCanonicalizedTypeRefName(typeReference.GetElementType()) == "[" + assembly + "]" + type &&
|
return typeReference != null &&
|
||||||
|
MemberReferenceHelper.getCanonicalizedTypeRefName(typeReference.GetElementType()) == "[" + assembly + "]" + type &&
|
||||||
typeReference.FullName == type + extra;
|
typeReference.FullName == type + extra;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user