From 362ed3a9b65c1f13adf3f0ab2b59b4910673ebb4 Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Wed, 15 May 2024 13:08:51 -0400 Subject: [PATCH] Protect against odd end-of-stream issues --- SabreTools.Serialization/Deserializers/NewExecutable.cs | 8 ++++---- .../Deserializers/PortableExecutable.cs | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) 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)