From 1dfd2bb9ac53c51a226a5b09644b624995eb525b Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Wed, 28 Nov 2018 14:32:10 +0100 Subject: [PATCH] Fix MetadataTokenSearchStrategy. --- ILSpy/Search/MetadataTokenSearchStrategy.cs | 30 ++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/ILSpy/Search/MetadataTokenSearchStrategy.cs b/ILSpy/Search/MetadataTokenSearchStrategy.cs index 87e482c45..d1951907f 100644 --- a/ILSpy/Search/MetadataTokenSearchStrategy.cs +++ b/ILSpy/Search/MetadataTokenSearchStrategy.cs @@ -25,12 +25,40 @@ namespace ICSharpCode.ILSpy.Search if (searchTermToken.IsNil) return; var typeSystem = module.GetTypeSystemOrNull(); if (typeSystem == null) return; + var metadataModule = (MetadataModule)typeSystem.MainModule; + int row = module.Metadata.GetRowNumber(searchTermToken); switch (searchTermToken.Kind) { case HandleKind.TypeDefinition: - var type = ((MetadataModule)typeSystem.MainModule).GetDefinition((TypeDefinitionHandle)searchTermToken); + if (row < 1 || row > module.Metadata.TypeDefinitions.Count) + break; + var type = metadataModule.GetDefinition((TypeDefinitionHandle)searchTermToken); addResult(ResultFromEntity(type)); break; + case HandleKind.MethodDefinition: + if (row < 1 || row > module.Metadata.MethodDefinitions.Count) + break; + var method = metadataModule.GetDefinition((MethodDefinitionHandle)searchTermToken); + addResult(ResultFromEntity(method)); + break; + case HandleKind.FieldDefinition: + if (row < 1 || row > module.Metadata.FieldDefinitions.Count) + break; + var field = metadataModule.GetDefinition((FieldDefinitionHandle)searchTermToken); + addResult(ResultFromEntity(field)); + break; + case HandleKind.PropertyDefinition: + if (row < 1 || row > module.Metadata.PropertyDefinitions.Count) + break; + var property = metadataModule.GetDefinition((PropertyDefinitionHandle)searchTermToken); + addResult(ResultFromEntity(property)); + break; + case HandleKind.EventDefinition: + if (row < 1 || row > module.Metadata.EventDefinitions.Count) + break; + var @event = metadataModule.GetDefinition((EventDefinitionHandle)searchTermToken); + addResult(ResultFromEntity(@event)); + break; } } }