From 1b412c3027b2ec750167863d62ae33f5d769a207 Mon Sep 17 00:00:00 2001 From: TheRogueArchivist <24215969+TheRogueArchivist@users.noreply.github.com> Date: Wed, 5 Jun 2024 20:19:35 -0600 Subject: [PATCH] Add header length safeguards to PortableExecutable wrapper (#9) --- .../Wrappers/PortableExecutable.cs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/SabreTools.Serialization/Wrappers/PortableExecutable.cs b/SabreTools.Serialization/Wrappers/PortableExecutable.cs index fb82a1f3..a9059312 100644 --- a/SabreTools.Serialization/Wrappers/PortableExecutable.cs +++ b/SabreTools.Serialization/Wrappers/PortableExecutable.cs @@ -45,7 +45,12 @@ namespace SabreTools.Serialization.Wrappers .OrderBy(s => s) .First(); int headerLength = (int)(firstSectionAddress - headerStartAddress); - _headerPaddingData = ReadFromDataSource((int)headerStartAddress, headerLength); + + // Check if the header length is more than 0 before reading data + if (headerLength <= 0) + _headerPaddingData = []; + else + _headerPaddingData = ReadFromDataSource((int)headerStartAddress, headerLength); // Cache and return the header padding data, even if null return _headerPaddingData; @@ -80,7 +85,12 @@ namespace SabreTools.Serialization.Wrappers .OrderBy(s => s) .First(); int headerLength = (int)(firstSectionAddress - headerStartAddress); - _headerPaddingStrings = ReadStringsFromDataSource((int)headerStartAddress, headerLength, charLimit: 3); + + // Check if the header length is more than 0 before reading strings + if (headerLength <= 0) + _headerPaddingStrings = []; + else + _headerPaddingStrings = ReadStringsFromDataSource((int)headerStartAddress, headerLength, charLimit: 3); // Cache and return the header padding data, even if null return _headerPaddingStrings;