From 26bda041fa5bf86a048a6ee93399965ff31ff7d3 Mon Sep 17 00:00:00 2001 From: Berk <12572227+par274@users.noreply.github.com> Date: Mon, 3 Aug 2026 10:09:07 +0300 Subject: [PATCH] [videoout] guard degenerate guest buffer ranges (#755) --- src/SharpEmu.Libs/VideoOut/VulkanVideoPresenter.cs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/SharpEmu.Libs/VideoOut/VulkanVideoPresenter.cs b/src/SharpEmu.Libs/VideoOut/VulkanVideoPresenter.cs index 62bb031c..968d3038 100644 --- a/src/SharpEmu.Libs/VideoOut/VulkanVideoPresenter.cs +++ b/src/SharpEmu.Libs/VideoOut/VulkanVideoPresenter.cs @@ -10179,7 +10179,12 @@ internal static unsafe class VulkanVideoPresenter } var size = (ulong)Math.Max(guestBuffer.Length, sizeof(uint)); - var endAddress = checked(guestBuffer.BaseAddress + size); + if (guestBuffer.BaseAddress > ulong.MaxValue - size) + { + return CreateTransientGlobalBufferResource(guestBuffer); + } + + var endAddress = guestBuffer.BaseAddress + size; GuestBufferAllocation? allocation = null; foreach (var candidate in _guestBufferAllocations) { @@ -10414,9 +10419,14 @@ internal static unsafe class VulkanVideoPresenter } var size = (ulong)Math.Max(buffer.Length, sizeof(uint)); + if (buffer.BaseAddress > ulong.MaxValue - size - 3) + { + continue; + } + var alignedStart = buffer.BaseAddress & ~(GuestStorageBufferOffsetAlignment - 1); - var paddedEnd = checked(buffer.BaseAddress + size + 3) & ~3UL; + var paddedEnd = (buffer.BaseAddress + size + 3) & ~3UL; ranges.Add(( alignedStart, paddedEnd));