Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/cecil.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJb Evain <jb@evain.net>2015-04-25 23:30:26 +0300
committerJb Evain <jb@evain.net>2015-04-25 23:30:26 +0300
commit1e03c149f65397e7e494cfdc5c0af0104af6b741 (patch)
tree0f2e58ce62ae5a5ae16d75b075e25ee7bb038644 /Mono.Cecil.PE
parentf9ebd0245249dcb76d15e14871226cfee839df4e (diff)
GetReaderAt can return null if RVA can not be resolved
Diffstat (limited to 'Mono.Cecil.PE')
-rw-r--r--Mono.Cecil.PE/Image.cs15
1 files changed, 13 insertions, 2 deletions
diff --git a/Mono.Cecil.PE/Image.cs b/Mono.Cecil.PE/Image.cs
index cf2d7bb..e67fffe 100644
--- a/Mono.Cecil.PE/Image.cs
+++ b/Mono.Cecil.PE/Image.cs
@@ -119,14 +119,22 @@ namespace Mono.Cecil.PE {
public BinaryStreamReader GetReaderAt (RVA rva)
{
+ var section = GetSectionAtVirtualAddress (rva);
+ if (section == null)
+ return null;
+
var reader = new BinaryStreamReader (Stream);
- reader.MoveTo (ResolveVirtualAddress (rva));
+ reader.MoveTo (ResolveVirtualAddressInSection (rva, section));
return reader;
}
public ImageDebugDirectory GetDebugHeader (out byte [] header)
{
var reader = GetReaderAt (Debug.VirtualAddress);
+ if (reader == null) {
+ header = Empty<byte>.Array;
+ return new ImageDebugDirectory ();
+ }
var directory = new ImageDebugDirectory {
Characteristics = reader.ReadInt32 (),
@@ -140,7 +148,10 @@ namespace Mono.Cecil.PE {
};
reader = GetReaderAt ((uint) directory.AddressOfRawData);
- header = reader.ReadBytes (directory.SizeOfData);
+ header = reader != null
+ ? reader.ReadBytes (directory.SizeOfData)
+ : Empty<byte>.Array;
+
return directory;
}