From 49ec360f29746b5bb46bb47197373f288acce144 Mon Sep 17 00:00:00 2001 From: Katy Coe Date: Sat, 12 Sep 2020 13:21:36 +0200 Subject: [PATCH] Don't attempt to map VA to read 0-length arrays (#67) --- .../FileFormatReaders/FileFormatReader.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Il2CppInspector.Common/FileFormatReaders/FileFormatReader.cs b/Il2CppInspector.Common/FileFormatReaders/FileFormatReader.cs index cde024b..ec62d23 100644 --- a/Il2CppInspector.Common/FileFormatReaders/FileFormatReader.cs +++ b/Il2CppInspector.Common/FileFormatReaders/FileFormatReader.cs @@ -223,7 +223,7 @@ namespace Il2CppInspector // Retrieve items from specified RVA(s) public byte ReadMappedByte(ulong uiAddr) => ReadByte(MapVATR(uiAddr)); - public byte[] ReadMappedBytes(ulong uiAddr, int count) => ReadBytes(MapVATR(uiAddr), count); + public byte[] ReadMappedBytes(ulong uiAddr, int count) => count > 0? ReadBytes(MapVATR(uiAddr), count) : new byte[0]; public bool ReadMappedBoolean(ulong uiAddr) => ReadBoolean(MapVATR(uiAddr)); public long ReadMappedInt64(ulong uiAddr) => ReadInt64(MapVATR(uiAddr)); public int ReadMappedInt32(ulong uiAddr) => ReadInt32(MapVATR(uiAddr)); @@ -233,14 +233,14 @@ namespace Il2CppInspector public ushort ReadMappedUInt16(ulong uiAddr) => ReadUInt16(MapVATR(uiAddr)); public U ReadMappedObject(ulong uiAddr) where U : new() => ReadObject(MapVATR(uiAddr)); - public U[] ReadMappedArray(ulong uiAddr, int count) where U : new() => ReadArray(MapVATR(uiAddr), count); + public U[] ReadMappedArray(ulong uiAddr, int count) where U : new() => count > 0 ? ReadArray(MapVATR(uiAddr), count) : new U[0]; public string ReadMappedNullTerminatedString(ulong uiAddr, Encoding encoding = null) => ReadNullTerminatedString(MapVATR(uiAddr), encoding); public string ReadMappedFixedLengthString(ulong uiAddr, int length, Encoding encoding = null) => ReadFixedLengthString(MapVATR(uiAddr), length, encoding); // Read a file format dependent array of words (32 or 64 bits) // The primitive mappings in Bin2Object will automatically read a uint if the file is 32-bit public long ReadMappedWord(ulong uiAddr) => ReadWord(MapVATR(uiAddr)); - public long[] ReadMappedWordArray(ulong uiAddr, int count) => ReadArray(MapVATR(uiAddr), count); + public long[] ReadMappedWordArray(ulong uiAddr, int count) => count > 0 ? ReadArray(MapVATR(uiAddr), count) : new long[0]; // Reads a list of pointers, then reads each object pointed to public List ReadMappedObjectPointerArray(ulong uiAddr, int count) where U : new() {