diff --git a/SabreTools.Serialization/Deserializers/NewExecutable.cs b/SabreTools.Serialization/Deserializers/NewExecutable.cs index 276eae77..5209d944 100644 --- a/SabreTools.Serialization/Deserializers/NewExecutable.cs +++ b/SabreTools.Serialization/Deserializers/NewExecutable.cs @@ -372,7 +372,7 @@ namespace SabreTools.Serialization.Deserializers // TODO: Use marshalling here instead of building var residentNameTable = new List(); - while (data.Position < endOffset) + while (data.Position < endOffset && data.Position < data.Length) { var entry = ParseResidentNameTableEntry(data); if (entry == null) @@ -445,7 +445,7 @@ namespace SabreTools.Serialization.Deserializers // TODO: Use marshalling here instead of building var importedNameTable = new Dictionary(); - while (data.Position < endOffset) + while (data.Position < endOffset && data.Position < data.Length) { ushort currentOffset = (ushort)data.Position; var entry = ParseImportedNameTableEntry(data); @@ -485,7 +485,7 @@ namespace SabreTools.Serialization.Deserializers // TODO: Use marshalling here instead of building var entryTable = new List(); - while (data.Position < endOffset) + while (data.Position < endOffset && data.Position < data.Length) { var entry = new EntryTableBundle(); entry.EntryCount = data.ReadByteValue(); @@ -524,7 +524,7 @@ namespace SabreTools.Serialization.Deserializers // TODO: Use marshalling here instead of building var residentNameTable = new List(); - while (data.Position < endOffset) + while (data.Position < endOffset && data.Position < data.Length) { var entry = ParseNonResidentNameTableEntry(data); if (entry == null) diff --git a/SabreTools.Serialization/Deserializers/PortableExecutable.cs b/SabreTools.Serialization/Deserializers/PortableExecutable.cs index 49f47c65..c55be122 100644 --- a/SabreTools.Serialization/Deserializers/PortableExecutable.cs +++ b/SabreTools.Serialization/Deserializers/PortableExecutable.cs @@ -703,7 +703,7 @@ namespace SabreTools.Serialization.Deserializers // TODO: Use marshalling here instead of building var baseRelocationTable = new List(); - while (data.Position < endOffset) + while (data.Position < endOffset && data.Position < data.Length) { var baseRelocationBlock = new BaseRelocationBlock(); @@ -724,12 +724,12 @@ namespace SabreTools.Serialization.Deserializers totalSize += 2; } - baseRelocationBlock.TypeOffsetFieldEntries = typeOffsetFieldEntries.ToArray(); + baseRelocationBlock.TypeOffsetFieldEntries = [.. typeOffsetFieldEntries]; baseRelocationTable.Add(baseRelocationBlock); } - return baseRelocationTable.ToArray(); + return [.. baseRelocationTable]; } /// @@ -745,7 +745,7 @@ namespace SabreTools.Serialization.Deserializers var debugDirectoryTable = new List(); - while (data.Position < endOffset) + while (data.Position < endOffset && data.Position < data.Length) { var debugDirectoryEntry = data.ReadType(); if (debugDirectoryEntry == null)