From ff9fe4d9409e2fdaecb6998838855df7b6605fc4 Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Fri, 29 Jun 2018 15:56:14 +0200 Subject: [PATCH] Add some validation before using corHeader.EntryPointTokenOrRelativeVirtualAddress --- ILSpy/Languages/CSharpLanguage.cs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/ILSpy/Languages/CSharpLanguage.cs b/ILSpy/Languages/CSharpLanguage.cs index b330c0a09..58d241531 100644 --- a/ILSpy/Languages/CSharpLanguage.cs +++ b/ILSpy/Languages/CSharpLanguage.cs @@ -339,11 +339,13 @@ namespace ICSharpCode.ILSpy output.WriteLine(); } var corHeader = module.Reader.PEHeaders.CorHeader; - var entrypointHandle = MetadataTokens.MethodDefinitionHandle(corHeader.EntryPointTokenOrRelativeVirtualAddress); - if (!entrypointHandle.IsNil) { - var entrypoint = metadata.GetMethodDefinition(entrypointHandle); + var entrypointHandle = MetadataTokens.EntityHandle(corHeader.EntryPointTokenOrRelativeVirtualAddress); + if (!entrypointHandle.IsNil && entrypointHandle.Kind == HandleKind.MethodDefinition) { + var entrypoint = metadata.GetMethodDefinition((MethodDefinitionHandle)entrypointHandle); output.Write("// Entry point: "); - output.WriteReference(entrypoint.GetDeclaringType().GetFullTypeName(metadata) + "." + metadata.GetString(entrypoint.Name), new Decompiler.Metadata.MethodDefinition(module, entrypointHandle)); + string name = entrypoint.GetDeclaringType().GetFullTypeName(metadata) + "." + metadata.GetString(entrypoint.Name); + var entrypointEntity = new Decompiler.Metadata.MethodDefinition(module, (MethodDefinitionHandle)entrypointHandle); + output.WriteReference(name, entrypointEntity); output.WriteLine(); } output.WriteLine("// Architecture: " + GetPlatformDisplayName(module));