From 64e9bfaadfa49ecb1db8427ba15ee085daffdaff Mon Sep 17 00:00:00 2001 From: Mattias Karlsson Date: Sat, 2 Apr 2022 19:27:04 +0200 Subject: [PATCH] (GH-3823) Only load valid versioned assmblies * fixes #3823 --- .../Scripting/ReferenceAssemblyResolver.cs | 11 +++++++++-- .../Scripting/ScriptAssemblyResolver.cs | 11 +++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/Cake/Infrastructure/Scripting/ReferenceAssemblyResolver.cs b/src/Cake/Infrastructure/Scripting/ReferenceAssemblyResolver.cs index d420818f87..843316378d 100644 --- a/src/Cake/Infrastructure/Scripting/ReferenceAssemblyResolver.cs +++ b/src/Cake/Infrastructure/Scripting/ReferenceAssemblyResolver.cs @@ -9,6 +9,7 @@ namespace Cake.Infrastructure.Scripting { public sealed class ReferenceAssemblyResolver : IReferenceAssemblyResolver { + private static readonly Version VersionZero = new Version(0, 0, 0, 0); private readonly ICakeLog _log; public ReferenceAssemblyResolver(ICakeLog log) @@ -36,7 +37,7 @@ IEnumerable TryGetReferenceAssemblies() } catch (Exception ex) { - _log.Debug(log => log("Failed to load {0}\r\n{1}", reference.FilePath, ex)); + _log.Debug(log => log("Failed to load {0}\r\nException: {1}", reference.FilePath, ex)); continue; } @@ -49,6 +50,12 @@ IEnumerable TryGetReferenceAssemblies() foreach (var assemblyRefName in assembly.GetReferencedAssemblies()) { + if (assemblyRefName == null || + assemblyRefName.Version == VersionZero) + { + continue; + } + Assembly assemblyRef; try { @@ -56,7 +63,7 @@ IEnumerable TryGetReferenceAssemblies() } catch (Exception ex) { - _log.Debug(log => log("Failed to load {0}\r\n{1}", reference.FilePath, ex)); + _log.Debug(log => log("Failed to load {0}\r\nReference: {1}\r\n Exception: {2}", assemblyRefName, assembly, ex)); continue; } diff --git a/src/Cake/Infrastructure/Scripting/ScriptAssemblyResolver.cs b/src/Cake/Infrastructure/Scripting/ScriptAssemblyResolver.cs index e9406473d9..44ea0e886a 100644 --- a/src/Cake/Infrastructure/Scripting/ScriptAssemblyResolver.cs +++ b/src/Cake/Infrastructure/Scripting/ScriptAssemblyResolver.cs @@ -15,6 +15,7 @@ namespace Cake.Infrastructure.Scripting public sealed class ScriptAssemblyResolver : IDisposable { private const string AssemblyResourcesExtension = ".resources"; + private static readonly Version VersionZero = new Version(0, 0, 0, 0); private readonly ICakeEnvironment _environment; private readonly ICakeLog _log; @@ -49,6 +50,11 @@ private Assembly AssemblyResolve(object sender, ResolveEventArgs args) var shortName = assemblyName.Name; var version = assemblyName.Version; + if (version == VersionZero) + { + return null; + } + // Preventing indirect recursive calls via Assembly.Load() if (!_resolvedNames.Add(shortName + version)) { @@ -65,6 +71,11 @@ private Assembly AssemblyResolve(AssemblyName assemblyName) var shortName = assemblyName.Name; var version = assemblyName.Version; + if (version == VersionZero) + { + return null; + } + Assembly assembly = null; try {