From 2848707838f1f12a51a02adc56b24f6e4634bda9 Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Tue, 23 Jan 2018 19:11:20 +0100 Subject: [PATCH] Fix #1031: Do not crash during search, if Cecil throws an exception. --- ILSpy/SearchStrategies.cs | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/ILSpy/SearchStrategies.cs b/ILSpy/SearchStrategies.cs index 46385006d..e8f7b4539 100644 --- a/ILSpy/SearchStrategies.cs +++ b/ILSpy/SearchStrategies.cs @@ -139,12 +139,17 @@ namespace ICSharpCode.ILSpy } } - void Add(IEnumerable items, TypeDefinition type, Language language, Action addResult, Func matcher, Func image) where T : MemberReference + void Add(Func> itemsGetter, TypeDefinition type, Language language, Action addResult, Func matcher, Func image) where T : MemberReference { + IEnumerable items = Enumerable.Empty(); + try { + items = itemsGetter(); + } catch (Exception ex) { + System.Diagnostics.Debug.Print(ex.ToString()); + } foreach (var item in items) { if (matcher(item, language)) { - addResult(new SearchResult - { + addResult(new SearchResult { Member = item, Fitness = CalculateFitness(item), Image = image(item), @@ -158,10 +163,10 @@ namespace ICSharpCode.ILSpy public virtual void Search(TypeDefinition type, Language language, Action addResult) { - Add(type.Fields, type, language, addResult, IsMatch, FieldTreeNode.GetIcon); - Add(type.Properties, type, language, addResult, IsMatch, p => PropertyTreeNode.GetIcon(p)); - Add(type.Events, type, language, addResult, IsMatch, EventTreeNode.GetIcon); - Add(type.Methods.Where(NotSpecialMethod), type, language, addResult, IsMatch, MethodTreeNode.GetIcon); + Add(() => type.Fields, type, language, addResult, IsMatch, FieldTreeNode.GetIcon); + Add(() => type.Properties, type, language, addResult, IsMatch, p => PropertyTreeNode.GetIcon(p)); + Add(() => type.Events, type, language, addResult, IsMatch, EventTreeNode.GetIcon); + Add(() => type.Methods.Where(NotSpecialMethod), type, language, addResult, IsMatch, MethodTreeNode.GetIcon); foreach (TypeDefinition nestedType in type.NestedTypes) { Search(nestedType, language, addResult);