Skip to content

Commit 665e876

Browse files
committed
fix: add proper error handling for file stream reads in DLL validation
Signed-off-by: jbrinkman <[email protected]>
1 parent 3cbb43a commit 665e876

File tree

2 files changed

+18
-5
lines changed

2 files changed

+18
-5
lines changed

src/DotNetApiDiff/AssemblyLoading/AssemblyLoader.cs

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,11 @@ private bool IsProbablyNativeDll(string filePath)
262262
}
263263

264264
byte[] buffer = new byte[2];
265-
fileStream.Read(buffer, 0, 2);
265+
int bytesRead = fileStream.Read(buffer, 0, 2);
266+
if (bytesRead < 2)
267+
{
268+
return false; // Not enough bytes to determine if it's a DLL
269+
}
266270

267271
// Check for the MZ header (0x4D, 0x5A)
268272
if (buffer[0] != 0x4D || buffer[1] != 0x5A)
@@ -275,15 +279,25 @@ private bool IsProbablyNativeDll(string filePath)
275279

276280
// Read the PE header offset
277281
byte[] offsetBuffer = new byte[4];
278-
fileStream.Read(offsetBuffer, 0, 4);
282+
bytesRead = 0;
283+
bytesRead = fileStream.Read(offsetBuffer, 0, 4);
284+
if (bytesRead < 4)
285+
{
286+
return false; // Not enough bytes to determine if it's a DLL
287+
}
279288
int peOffset = BitConverter.ToInt32(offsetBuffer, 0);
280289

281290
// Seek to the PE header
282291
fileStream.Seek(peOffset, SeekOrigin.Begin);
283292

284293
// Read the PE signature
285294
byte[] peBuffer = new byte[4];
286-
fileStream.Read(peBuffer, 0, 4);
295+
bytesRead = 0;
296+
bytesRead = fileStream.Read(peBuffer, 0, 4);
297+
if (bytesRead < 4)
298+
{
299+
return false; // Not enough bytes to determine if it's a DLL
300+
}
287301

288302
// Check for PE signature "PE\0\0"
289303
if (peBuffer[0] != 0x50 || peBuffer[1] != 0x45 || peBuffer[2] != 0 || peBuffer[3] != 0)

src/DotNetApiDiff/Commands/CompareCommand.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
11
// Copyright DotNet API Diff Project Contributors - SPDX Identifier: MIT
2-
using System.Reflection;
3-
using DotNetApiDiff.ExitCodes;
42
using DotNetApiDiff.Interfaces;
53
using DotNetApiDiff.Models;
64
using DotNetApiDiff.Models.Configuration;
@@ -10,6 +8,7 @@
108
using Spectre.Console.Cli;
119
using System.ComponentModel;
1210
using System.Diagnostics.CodeAnalysis;
11+
using System.Reflection;
1312

1413
namespace DotNetApiDiff.Commands;
1514

0 commit comments

Comments
 (0)