Browse Source

#2089: Handle invalid attribute/reference metadata in `DetectTargetFrameworkId`

pull/2113/head
Daniel Grunwald 5 years ago
parent
commit
40e2776f02
  1. 8
      ICSharpCode.Decompiler/Metadata/DotNetCorePathFinderExtensions.cs

8
ICSharpCode.Decompiler/Metadata/DotNetCorePathFinderExtensions.cs

@ -55,6 +55,7 @@ namespace ICSharpCode.Decompiler.Metadata @@ -55,6 +55,7 @@ namespace ICSharpCode.Decompiler.Metadata
var reader = assembly.GetMetadataReader();
foreach (var h in reader.GetCustomAttributes(Handle.AssemblyDefinition)) {
try {
var attribute = reader.GetCustomAttribute(h);
if (attribute.GetAttributeType(reader).GetFullTypeName(reader).ToString() != TargetFrameworkAttributeName)
continue;
@ -62,9 +63,13 @@ namespace ICSharpCode.Decompiler.Metadata @@ -62,9 +63,13 @@ namespace ICSharpCode.Decompiler.Metadata
if (blobReader.ReadUInt16() == 0x0001) {
return blobReader.ReadSerializedString();
}
} catch (BadImageFormatException) {
// ignore malformed attributes
}
}
foreach (var h in reader.AssemblyReferences) {
try {
var r = reader.GetAssemblyReference(h);
if (r.PublicKeyOrToken.IsNil)
continue;
@ -94,6 +99,9 @@ namespace ICSharpCode.Decompiler.Metadata @@ -94,6 +99,9 @@ namespace ICSharpCode.Decompiler.Metadata
version = r.Version.ToString(2);
return $".NETFramework,Version=v{version}";
}
} catch (BadImageFormatException) {
// ignore malformed references
}
}
// Optionally try to detect target version through assembly path as a fallback (use case: reference assemblies)

Loading…
Cancel
Save