From 8c0ca1a2a7be3a99a488b7bead27f753359998eb Mon Sep 17 00:00:00 2001 From: ParantezTech <12572227+par274@users.noreply.github.com> Date: Thu, 8 Oct 2026 23:44:39 +0300 Subject: [PATCH] [Kernel] Clear the outputs and report no space when no direct memory span is free Co-authored-by: Sekai <140012992+SekaixX@users.noreply.github.com> --- .../Kernel/KernelMemoryCompatExports.cs | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/SharpEmu.Libs/Kernel/KernelMemoryCompatExports.cs b/src/SharpEmu.Libs/Kernel/KernelMemoryCompatExports.cs index fa88d6b..1f9dee4 100644 --- a/src/SharpEmu.Libs/Kernel/KernelMemoryCompatExports.cs +++ b/src/SharpEmu.Libs/Kernel/KernelMemoryCompatExports.cs @@ -2844,15 +2844,23 @@ public static partial class KernelMemoryCompatExports return (int)OrbisGen2Result.ORBIS_GEN2_ERROR_INVALID_ARGUMENT; } - var searchStart = searchStartRaw < 0 ? 0UL : (ulong)searchStartRaw; - var searchEnd = searchEndRaw <= 0 - ? GuestMemoryLayout.DirectBytes - : Math.Min((ulong)searchEndRaw, GuestMemoryLayout.DirectBytes); - if (searchStart >= searchEnd) + if (!ctx.TryWriteUInt64(outAddress, 0) || !ctx.TryWriteUInt64(outSize, 0)) + { + return (int)OrbisGen2Result.ORBIS_GEN2_ERROR_MEMORY_FAULT; + } + + if (searchStartRaw < 0 || searchEndRaw < 0) { return (int)OrbisGen2Result.ORBIS_GEN2_ERROR_INVALID_ARGUMENT; } + var searchStart = (ulong)searchStartRaw; + var searchEnd = Math.Min((ulong)searchEndRaw, GuestMemoryLayout.DirectBytes); + if (searchStart >= searchEnd) + { + return MemoryNoSpace; + } + bool foundSpan; ulong candidate; ulong rangeAvailable; @@ -2868,7 +2876,7 @@ public static partial class KernelMemoryCompatExports if (!foundSpan) { - return (int)OrbisGen2Result.ORBIS_GEN2_ERROR_NOT_FOUND; + return MemoryNoSpace; } if (!ctx.TryWriteUInt64(outAddress, candidate) || !ctx.TryWriteUInt64(outSize, rangeAvailable))