From 521408b07c6682e95075538a7073f16e5f118574 Mon Sep 17 00:00:00 2001 From: hexawyz <8518235+hexawyz@users.noreply.github.com> Date: Sat, 8 Feb 2025 22:39:58 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20Fix=20pinning=20of=20memory=20ma?= =?UTF-8?q?pped=20file=20buffers=20beyond=20the=20first=20byte.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is the main reason for corruption of GIF images uploaded to Kraken Z. (Simply would not occur for images smaller than 2MB) --- src/Exo/Core/Exo.Memory/MemoryMappedFileMemoryManager.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Exo/Core/Exo.Memory/MemoryMappedFileMemoryManager.cs b/src/Exo/Core/Exo.Memory/MemoryMappedFileMemoryManager.cs index 039f629..35c0316 100644 --- a/src/Exo/Core/Exo.Memory/MemoryMappedFileMemoryManager.cs +++ b/src/Exo/Core/Exo.Memory/MemoryMappedFileMemoryManager.cs @@ -31,9 +31,10 @@ protected override void Dispose(bool disposing) public override MemoryHandle Pin(int elementIndex = 0) { + ArgumentOutOfRangeException.ThrowIfGreaterThan((uint)elementIndex, (uint)_length, nameof(elementIndex)); byte* pointer = null; _viewHandle.AcquirePointer(ref pointer); - return new MemoryHandle(pointer, pinnable: this); + return new MemoryHandle(pointer + (uint)elementIndex, pinnable: this); } public override void Unpin() => _viewHandle.ReleasePointer();