未验证 提交 5b43d0fc 编写于 作者: M Manish Vasani 提交者: GitHub

Merge pull request #32758 from mavasani/BadImageFormat

Gracefully handle documented exceptions from AssemblyMetadata.GetModules
......@@ -304,9 +304,14 @@ private void WriteMvidsTo(Metadata metadata, ObjectWriter writer, CancellationTo
if (metadata is AssemblyMetadata assemblyMetadata)
{
if (!TryGetModules(assemblyMetadata, out var modules))
{
// Gracefully bail out without writing anything to the writer.
return;
}
writer.WriteInt32((int)assemblyMetadata.Kind);
var modules = assemblyMetadata.GetModules();
writer.WriteInt32(modules.Length);
foreach (var module in modules)
......@@ -320,6 +325,23 @@ private void WriteMvidsTo(Metadata metadata, ObjectWriter writer, CancellationTo
WriteMvidTo((ModuleMetadata)metadata, writer, cancellationToken);
}
private static bool TryGetModules(AssemblyMetadata assemblyMetadata, out ImmutableArray<ModuleMetadata> modules)
{
// Gracefully handle documented exceptions from 'GetModules' invocation.
try
{
modules = assemblyMetadata.GetModules();
return true;
}
catch (Exception ex) when (ex is BadImageFormatException ||
ex is IOException ||
ex is ObjectDisposedException)
{
modules = default;
return false;
}
}
private void WriteMvidTo(ModuleMetadata metadata, ObjectWriter writer, CancellationToken cancellationToken)
{
cancellationToken.ThrowIfCancellationRequested();
......@@ -411,9 +433,15 @@ private void WriteTo(Metadata metadata, ObjectWriter writer, CancellationToken c
if (metadata is AssemblyMetadata assemblyMetadata)
{
if (!TryGetModules(assemblyMetadata, out var modules))
{
// Gracefully handle error case where unable to get modules.
writer.WriteInt32(MetadataFailed);
return;
}
writer.WriteInt32((int)assemblyMetadata.Kind);
var modules = assemblyMetadata.GetModules();
writer.WriteInt32(modules.Length);
foreach (var module in modules)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册