From 00ef7d1e01884c77df71f0da8ed7fc43e37dca80 Mon Sep 17 00:00:00 2001 From: ema Date: Fri, 23 May 2025 03:03:36 +0800 Subject: [PATCH] Improve PE parsing with extended buffer size --- .../PEInfoPanel.xaml.cs | 32 +++++++++++++++---- 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/QuickLook.Plugin/QuickLook.Plugin.PEViewer/PEInfoPanel.xaml.cs b/QuickLook.Plugin/QuickLook.Plugin.PEViewer/PEInfoPanel.xaml.cs index 0ff1d50..1853e70 100644 --- a/QuickLook.Plugin/QuickLook.Plugin.PEViewer/PEInfoPanel.xaml.cs +++ b/QuickLook.Plugin/QuickLook.Plugin.PEViewer/PEInfoPanel.xaml.cs @@ -83,13 +83,33 @@ public partial class PEInfoPanel : UserControl try { - using var stream = new FileStream(path, FileMode.Open, FileAccess.Read); - using var binaryReader = new BinaryReader(stream); - var byteArray = binaryReader.ReadBytes(1024); // Fast reading - var peImage = PEImage.FromBinary(byteArray); - var machine = peImage.CoffHeader.Machine; + int maxAttempts = 3; + int bufferSize = 1024; - arch = machine.ToImageMachineName(); + for (int attempt = 0; attempt < maxAttempts; attempt++) + { + try + { + using var stream = new FileStream(path, FileMode.Open, FileAccess.Read); + using var binaryReader = new BinaryReader(stream); + var byteArray = binaryReader.ReadBytes(bufferSize); + var peImage = PEImage.FromBinary(byteArray); + var machine = peImage.CoffHeader.Machine; + + arch = machine.ToImageMachineName(); + break; // Successfully parsed, jumped out of the loop + } + catch (Exception e) when (e.Message == "Section headers incomplete.") + { + // Extended buffer size + bufferSize *= 2; + } + catch + { + // Non-Section headers errors will not be retryed + break; + } + } } catch {