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))