Added more checks in case metadata is invalid

This commit is contained in:
de4dot 2011-10-03 09:36:46 +02:00
parent cf32fa3f61
commit 75752f7388
3 changed files with 18 additions and 3 deletions

View File

@ -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:

View File

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

View File

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