Skip to content

Commit

Permalink
[mono] Fix second pass of MarshallingPInvokeScanner with metadata-fre…
Browse files Browse the repository at this point in the history
…e DLLs (dotnet#89555)

* Fix second pass of marshalling scanner to also tolerate metadata-free PEs.

* Assembly name is now checked only when metadata are present.
  • Loading branch information
jandupej authored Jul 28, 2023
1 parent 862cf1a commit 1da23b1
Showing 1 changed file with 9 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -74,14 +74,16 @@ private string[] ScanAssemblies(string[] assemblies)

private void ResolveInconclusiveTypes(HashSet<string> incompatible, string assyPath, MinimalMarshalingTypeCompatibilityProvider mmtcp)
{
string assyName = MetadataReader.GetAssemblyName(assyPath).Name!;
HashSet<string> inconclusiveTypes = mmtcp.GetInconclusiveTypesForAssembly(assyName);
if(inconclusiveTypes.Count == 0)
return;

using FileStream file = new FileStream(assyPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
using PEReader peReader = new PEReader(file);
if (!peReader.HasMetadata)
return; // Just return. There are no metadata in the DLL to help us with remaining types.

MetadataReader mdtReader = peReader.GetMetadataReader();
string assyName = mdtReader.GetString(mdtReader.GetAssemblyDefinition().Name);
HashSet<string> inconclusiveTypes = mmtcp.GetInconclusiveTypesForAssembly(assyName);
if(inconclusiveTypes.Count == 0)
return;

SignatureDecoder<Compatibility, object> decoder = new(mmtcp, mdtReader, null!);

Expand All @@ -107,9 +109,8 @@ private bool IsAssemblyIncompatible(string assyPath, MinimalMarshalingTypeCompat
using FileStream file = new FileStream(assyPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
using PEReader peReader = new PEReader(file);
if (!peReader.HasMetadata)
{
return false;
}
return false; // No types in this DLL means no incompatible marshaling constructs.

MetadataReader mdtReader = peReader.GetMetadataReader();

foreach(CustomAttributeHandle attrHandle in mdtReader.CustomAttributes)
Expand Down

0 comments on commit 1da23b1

Please sign in to comment.