From d2a73a153ba36f9604ffff2a7ad16b837b4ba597 Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Sun, 10 Mar 2024 22:27:18 -0400 Subject: [PATCH] Unroll Linq statements to fix exceptions (fixes #287) --- BinaryObjectScanner/FileType/Executable.cs | 32 +++++++++++++++------- BinaryObjectScanner/Handler.cs | 19 +++++++++++-- 2 files changed, 38 insertions(+), 13 deletions(-) diff --git a/BinaryObjectScanner/FileType/Executable.cs b/BinaryObjectScanner/FileType/Executable.cs index 015bbc50..78617a15 100644 --- a/BinaryObjectScanner/FileType/Executable.cs +++ b/BinaryObjectScanner/FileType/Executable.cs @@ -43,7 +43,7 @@ namespace BinaryObjectScanner.FileType get { contentCheckClasses ??= InitCheckClasses(); - return contentCheckClasses ?? Enumerable.Empty(); + return contentCheckClasses ?? []; } } @@ -55,7 +55,7 @@ namespace BinaryObjectScanner.FileType get { linearExecutableCheckClasses ??= InitCheckClasses(); - return linearExecutableCheckClasses ?? Enumerable.Empty(); + return linearExecutableCheckClasses ?? []; } } @@ -67,7 +67,7 @@ namespace BinaryObjectScanner.FileType get { msdosExecutableCheckClasses ??= InitCheckClasses(); - return msdosExecutableCheckClasses ?? Enumerable.Empty(); + return msdosExecutableCheckClasses ?? []; } } @@ -79,7 +79,7 @@ namespace BinaryObjectScanner.FileType get { newExecutableCheckClasses ??= InitCheckClasses(); - return newExecutableCheckClasses ?? Enumerable.Empty(); + return newExecutableCheckClasses ?? []; } } @@ -91,7 +91,7 @@ namespace BinaryObjectScanner.FileType get { portableExecutableCheckClasses ??= InitCheckClasses(); - return portableExecutableCheckClasses ?? Enumerable.Empty(); + return portableExecutableCheckClasses ?? []; } } @@ -537,17 +537,29 @@ namespace BinaryObjectScanner.FileType /// Initialize all implementations of a type /// private static IEnumerable? InitCheckClasses() => - InitCheckClasses(typeof(Handler).Assembly) ?? Enumerable.Empty(); + InitCheckClasses(typeof(Handler).Assembly) ?? []; /// /// Initialize all implementations of a type /// private static IEnumerable? InitCheckClasses(Assembly assembly) { - return assembly.GetTypes()? - .Where(t => t.IsClass && t.GetInterface(typeof(T).Name) != null)? - .Select(t => (T?)Activator.CreateInstance(t)) - .Cast() ?? []; + List types = []; + try + { + foreach (Type type in assembly.GetTypes()) + { + if (type.IsClass && type.GetInterface(typeof(T).Name) != null) + { + var instance = (T?)Activator.CreateInstance(type); + if (instance != null) + types.Add(instance); + } + } + } + catch { } + + return types; } #endregion diff --git a/BinaryObjectScanner/Handler.cs b/BinaryObjectScanner/Handler.cs index df484fa1..ab368782 100644 --- a/BinaryObjectScanner/Handler.cs +++ b/BinaryObjectScanner/Handler.cs @@ -211,9 +211,22 @@ namespace BinaryObjectScanner /// private static IEnumerable InitCheckClasses(Assembly assembly) { - return assembly.GetTypes()? - .Where(t => t.IsClass && t.GetInterface(typeof(T).Name) != null)? - .Select(t => (T?)Activator.CreateInstance(t)) ?? []; + List types = []; + try + { + foreach (Type type in assembly.GetTypes()) + { + if (type.IsClass && type.GetInterface(typeof(T).Name) != null) + { + var instance = (T?)Activator.CreateInstance(type); + if (instance != null) + types.Add(instance); + } + } + } + catch { } + + return types; } #endregion