diff --git a/ICSharpCode.Decompiler/CSharp/Resolver/CSharpResolver.cs b/ICSharpCode.Decompiler/CSharp/Resolver/CSharpResolver.cs index 23171a906..8a3431096 100644 --- a/ICSharpCode.Decompiler/CSharp/Resolver/CSharpResolver.cs +++ b/ICSharpCode.Decompiler/CSharp/Resolver/CSharpResolver.cs @@ -1432,6 +1432,10 @@ namespace ICSharpCode.Decompiler.CSharp.Resolver TypeCode code = ReflectionHelper.GetTypeCode(underlyingType); if (code >= TypeCode.Boolean && code <= TypeCode.Decimal && expression.ConstantValue != null) { + if (expression.ConstantValue is string) + { + return new ErrorResolveResult(targetType); + } try { return new ConstantResolveResult(targetType, CSharpPrimitiveCast(code, expression.ConstantValue)); @@ -1454,6 +1458,10 @@ namespace ICSharpCode.Decompiler.CSharp.Resolver } else if ((underlyingType.Kind == TypeKind.NInt || underlyingType.Kind == TypeKind.NUInt) && expression.ConstantValue != null) { + if (expression.ConstantValue is string) + { + return new ErrorResolveResult(targetType); + } code = (underlyingType.Kind == TypeKind.NInt ? TypeCode.Int32 : TypeCode.UInt32); try { diff --git a/ICSharpCode.Decompiler/TypeSystem/MetadataModule.cs b/ICSharpCode.Decompiler/TypeSystem/MetadataModule.cs index ba0aef761..f4f4b7396 100644 --- a/ICSharpCode.Decompiler/TypeSystem/MetadataModule.cs +++ b/ICSharpCode.Decompiler/TypeSystem/MetadataModule.cs @@ -471,7 +471,10 @@ namespace ICSharpCode.Decompiler.TypeSystem IMethod ResolveMethodReference(MemberReferenceHandle memberRefHandle, GenericContext context, IReadOnlyList methodTypeArguments = null, bool expandVarArgs = true) { var memberRef = metadata.GetMemberReference(memberRefHandle); - Debug.Assert(memberRef.GetKind() == MemberReferenceKind.Method); + if (memberRef.GetKind() != MemberReferenceKind.Method) + { + throw new BadImageFormatException($"Member reference must be method, but was: {memberRef.GetKind()}"); + } MethodSignature signature; IReadOnlyList classTypeArguments = null; IMethod method;