From 0263346d89ea578ed8e2b379fe03e39405aae73f Mon Sep 17 00:00:00 2001 From: Konstantin Budnikov Date: Fri, 23 Aug 2024 16:24:15 +0300 Subject: [PATCH] Fixed AccessViolationExeption crash on AMD Radeon RAMDisk (#1423) --- .../Hardware/Storage/WindowsStorage.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/LibreHardwareMonitorLib/Hardware/Storage/WindowsStorage.cs b/LibreHardwareMonitorLib/Hardware/Storage/WindowsStorage.cs index c56491e..a3317c8 100644 --- a/LibreHardwareMonitorLib/Hardware/Storage/WindowsStorage.cs +++ b/LibreHardwareMonitorLib/Hardware/Storage/WindowsStorage.cs @@ -80,19 +80,19 @@ internal static class WindowsStorage { Kernel32.STORAGE_DEVICE_DESCRIPTOR descriptor = Marshal.PtrToStructure(descriptorPtr); Index = index; - Vendor = GetString(descriptorPtr, descriptor.VendorIdOffset); - Product = GetString(descriptorPtr, descriptor.ProductIdOffset); - Revision = GetString(descriptorPtr, descriptor.ProductRevisionOffset); - Serial = GetString(descriptorPtr, descriptor.SerialNumberOffset); + Vendor = GetString(descriptorPtr, descriptor.VendorIdOffset, descriptor.Size); + Product = GetString(descriptorPtr, descriptor.ProductIdOffset, descriptor.Size); + Revision = GetString(descriptorPtr, descriptor.ProductRevisionOffset, descriptor.Size); + Serial = GetString(descriptorPtr, descriptor.SerialNumberOffset, descriptor.Size); BusType = descriptor.BusType; Removable = descriptor.RemovableMedia; RawData = new byte[descriptor.Size]; Marshal.Copy(descriptorPtr, RawData, 0, RawData.Length); } - private static string GetString(IntPtr descriptorPtr, uint offset) + private static string GetString(IntPtr descriptorPtr, uint offset, uint size) { - return offset > 0 ? Marshal.PtrToStringAnsi(IntPtr.Add(descriptorPtr, (int)offset))?.Trim() : string.Empty; + return offset > 0 && offset < size ? Marshal.PtrToStringAnsi(IntPtr.Add(descriptorPtr, (int)offset))?.Trim() : string.Empty; } } }