From 8e5d62f048175c0919e8a048754a4c3de1d3d009 Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Sun, 28 Jan 2018 17:30:22 +0000 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9BFix=20crashing=20if=20filter=20send?= =?UTF-8?q?s=20an=20IOException.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DiscImageChef.Filters/Filters.cs | 37 ++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/DiscImageChef.Filters/Filters.cs b/DiscImageChef.Filters/Filters.cs index 273ff4e88..3a9210ca3 100644 --- a/DiscImageChef.Filters/Filters.cs +++ b/DiscImageChef.Filters/Filters.cs @@ -32,6 +32,7 @@ using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Reflection; using DiscImageChef.Console; @@ -48,7 +49,7 @@ namespace DiscImageChef.Filters public FiltersList() { Assembly assembly = Assembly.GetAssembly(typeof(IFilter)); - Filters = new SortedDictionary(); + Filters = new SortedDictionary(); foreach(Type type in assembly.GetTypes().Where(t => t.GetInterfaces().Contains(typeof(IFilter)))) try @@ -67,27 +68,31 @@ namespace DiscImageChef.Filters /// The filter that allows reading the specified path public IFilter GetFilter(string path) { - IFilter noFilter = null; + try + { + IFilter noFilter = null; + foreach(IFilter filter in Filters.Values) + if(filter.Id != new Guid("12345678-AAAA-BBBB-CCCC-123456789000")) + { + if(!filter.Identify(path)) continue; - foreach(IFilter filter in Filters.Values) - if(filter.Id != new Guid("12345678-AAAA-BBBB-CCCC-123456789000")) - { - if(!filter.Identify(path)) continue; + IFilter foundFilter = + (IFilter)filter.GetType().GetConstructor(Type.EmptyTypes)?.Invoke(new object[] { }); - IFilter foundFilter = - (IFilter)filter.GetType().GetConstructor(Type.EmptyTypes)?.Invoke(new object[] { }); + foundFilter?.Open(path); - foundFilter?.Open(path); + if(foundFilter?.IsOpened() == true) return foundFilter; + } + else + noFilter = filter; - if(foundFilter?.IsOpened() == true) return foundFilter; - } - else noFilter = filter; + if(!noFilter?.Identify(path) == true) return noFilter; - if(!noFilter?.Identify(path) == true) return noFilter; + noFilter?.Open(path); - noFilter?.Open(path); - - return noFilter; + return noFilter; + } + catch(IOException) { return null; } } ///