Fix PEReader creation and caching (#1742)

Can't use a fixed stack-based pointer to initialize something on the heap and expect it to continue working :)
This commit is contained in:
Fadi Hanna 2020-01-15 10:37:01 -05:00 committed by Jan Kotas
parent 27b1f2c81b
commit eb8244be5e
1 changed files with 10 additions and 13 deletions

View File

@ -2,18 +2,19 @@
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using ILCompiler.Reflection.ReadyToRun;
using System;
using System.Collections.Generic;
using System.CommandLine;
using System.Collections.Immutable;
using System.CommandLine.Invocation;
using System.IO;
using System.Linq;
using System.Reflection.Metadata;
using System.Reflection.Metadata.Ecma335;
using System.Reflection.PortableExecutable;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
using ILCompiler.Reflection.ReadyToRun;
namespace R2RDump
{
@ -90,20 +91,16 @@ namespace R2RDump
private static unsafe MetadataReader Open(string filename)
{
byte[] Image = File.ReadAllBytes(filename);
byte[] image = File.ReadAllBytes(filename);
fixed (byte* p = Image)
PEReader peReader = new PEReader(Unsafe.As<byte[], ImmutableArray<byte>>(ref image));
if (!peReader.HasMetadata)
{
IntPtr ptr = (IntPtr)p;
PEReader peReader = new PEReader(p, Image.Length);
if (!peReader.HasMetadata)
{
throw new Exception($"ECMA metadata not found in file '{filename}'");
}
return peReader.GetMetadataReader();
throw new Exception($"ECMA metadata not found in file '{filename}'");
}
return peReader.GetMetadataReader();
}
}