Browse Source

Fix potential NullReferenceException in UniversalAssemblyResolver

pull/2423/head
Daniel Grunwald 4 years ago
parent
commit
715968e02a
  1. 23
      ICSharpCode.Decompiler/Metadata/UniversalAssemblyResolver.cs

23
ICSharpCode.Decompiler/Metadata/UniversalAssemblyResolver.cs

@ -483,19 +483,17 @@ namespace ICSharpCode.Decompiler.Metadata
if (reference.PublicKeyToken == null) if (reference.PublicKeyToken == null)
return null; return null;
if (version == null)
return null;
string? path; string? path;
if (decompilerRuntime == DecompilerRuntime.Mono) if (decompilerRuntime == DecompilerRuntime.Mono)
{ {
path = GetMonoMscorlibBasePath(version); path = GetMonoMscorlibBasePath(version);
} }
else if (version != null)
{
path = GetMscorlibBasePath(version, reference.PublicKeyToken.ToHexString(8));
}
else else
{ {
path = null; path = GetMscorlibBasePath(version, reference.PublicKeyToken.ToHexString(8));
} }
if (path == null) if (path == null)
@ -565,7 +563,7 @@ namespace ICSharpCode.Decompiler.Metadata
return null; return null;
} }
string? GetMonoMscorlibBasePath(Version? version) string? GetMonoMscorlibBasePath(Version version)
{ {
var path = Directory.GetParent(typeof(object).Module.FullyQualifiedName).Parent.FullName; var path = Directory.GetParent(typeof(object).Module.FullyQualifiedName).Parent.FullName;
if (version.Major == 1) if (version.Major == 1)
@ -683,12 +681,13 @@ namespace ICSharpCode.Decompiler.Metadata
{ {
var gac_folder = new StringBuilder() var gac_folder = new StringBuilder()
.Append(prefix) .Append(prefix)
.Append(reference.Version) .Append(reference.Version);
.Append("__"); if (reference.PublicKeyToken != null)
{
for (int i = 0; i < reference.PublicKeyToken.Length; i++) gac_folder.Append("__");
gac_folder.Append(reference.PublicKeyToken[i].ToString("x2")); for (int i = 0; i < reference.PublicKeyToken.Length; i++)
gac_folder.Append(reference.PublicKeyToken[i].ToString("x2"));
}
return Path.Combine( return Path.Combine(
Path.Combine( Path.Combine(
Path.Combine(gac, reference.Name), gac_folder.ToString()), Path.Combine(gac, reference.Name), gac_folder.ToString()),

Loading…
Cancel
Save