Skip to content

Commit d2a73a1

Browse files
committed
Unroll Linq statements to fix exceptions (fixes #287)
1 parent eae2e33 commit d2a73a1

File tree

2 files changed

+38
-13
lines changed

2 files changed

+38
-13
lines changed

BinaryObjectScanner/FileType/Executable.cs

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public static IEnumerable<IContentCheck> ContentCheckClasses
4343
get
4444
{
4545
contentCheckClasses ??= InitCheckClasses<IContentCheck>();
46-
return contentCheckClasses ?? Enumerable.Empty<IContentCheck>();
46+
return contentCheckClasses ?? [];
4747
}
4848
}
4949

@@ -55,7 +55,7 @@ public static IEnumerable<ILinearExecutableCheck> LinearExecutableCheckClasses
5555
get
5656
{
5757
linearExecutableCheckClasses ??= InitCheckClasses<ILinearExecutableCheck>();
58-
return linearExecutableCheckClasses ?? Enumerable.Empty<ILinearExecutableCheck>();
58+
return linearExecutableCheckClasses ?? [];
5959
}
6060
}
6161

@@ -67,7 +67,7 @@ public static IEnumerable<IMSDOSExecutableCheck> MSDOSExecutableCheckClasses
6767
get
6868
{
6969
msdosExecutableCheckClasses ??= InitCheckClasses<IMSDOSExecutableCheck>();
70-
return msdosExecutableCheckClasses ?? Enumerable.Empty<IMSDOSExecutableCheck>();
70+
return msdosExecutableCheckClasses ?? [];
7171
}
7272
}
7373

@@ -79,7 +79,7 @@ public static IEnumerable<INewExecutableCheck> NewExecutableCheckClasses
7979
get
8080
{
8181
newExecutableCheckClasses ??= InitCheckClasses<INewExecutableCheck>();
82-
return newExecutableCheckClasses ?? Enumerable.Empty<INewExecutableCheck>();
82+
return newExecutableCheckClasses ?? [];
8383
}
8484
}
8585

@@ -91,7 +91,7 @@ public static IEnumerable<IPortableExecutableCheck> PortableExecutableCheckClass
9191
get
9292
{
9393
portableExecutableCheckClasses ??= InitCheckClasses<IPortableExecutableCheck>();
94-
return portableExecutableCheckClasses ?? Enumerable.Empty<IPortableExecutableCheck>();
94+
return portableExecutableCheckClasses ?? [];
9595
}
9696
}
9797

@@ -537,17 +537,29 @@ public ConcurrentDictionary<IPortableExecutableCheck, string> RunPortableExecuta
537537
/// Initialize all implementations of a type
538538
/// </summary>
539539
private static IEnumerable<T>? InitCheckClasses<T>() =>
540-
InitCheckClasses<T>(typeof(Handler).Assembly) ?? Enumerable.Empty<T>();
540+
InitCheckClasses<T>(typeof(Handler).Assembly) ?? [];
541541

542542
/// <summary>
543543
/// Initialize all implementations of a type
544544
/// </summary>
545545
private static IEnumerable<T>? InitCheckClasses<T>(Assembly assembly)
546546
{
547-
return assembly.GetTypes()?
548-
.Where(t => t.IsClass && t.GetInterface(typeof(T).Name) != null)?
549-
.Select(t => (T?)Activator.CreateInstance(t))
550-
.Cast<T>() ?? [];
547+
List<T?> types = [];
548+
try
549+
{
550+
foreach (Type type in assembly.GetTypes())
551+
{
552+
if (type.IsClass && type.GetInterface(typeof(T).Name) != null)
553+
{
554+
var instance = (T?)Activator.CreateInstance(type);
555+
if (instance != null)
556+
types.Add(instance);
557+
}
558+
}
559+
}
560+
catch { }
561+
562+
return types;
551563
}
552564

553565
#endregion

BinaryObjectScanner/Handler.cs

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -211,9 +211,22 @@ public static ConcurrentDictionary<string, ConcurrentQueue<string>> HandlePathCh
211211
/// </summary>
212212
private static IEnumerable<T?> InitCheckClasses<T>(Assembly assembly)
213213
{
214-
return assembly.GetTypes()?
215-
.Where(t => t.IsClass && t.GetInterface(typeof(T).Name) != null)?
216-
.Select(t => (T?)Activator.CreateInstance(t)) ?? [];
214+
List<T?> types = [];
215+
try
216+
{
217+
foreach (Type type in assembly.GetTypes())
218+
{
219+
if (type.IsClass && type.GetInterface(typeof(T).Name) != null)
220+
{
221+
var instance = (T?)Activator.CreateInstance(type);
222+
if (instance != null)
223+
types.Add(instance);
224+
}
225+
}
226+
}
227+
catch { }
228+
229+
return types;
217230
}
218231

219232
#endregion

0 commit comments

Comments
 (0)