From de1b520498ba5974c3586c3897d1c48061c8cf88 Mon Sep 17 00:00:00 2001 From: lannoene <77375172+lannoene@users.noreply.github.com> Date: Fri, 18 Apr 2025 03:51:15 -0700 Subject: [PATCH] Fix File::Write() not conforming to debug header validation (#952) --- src/core/hle/service/fs/file.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/core/hle/service/fs/file.cpp b/src/core/hle/service/fs/file.cpp index a21b4c70d..7ba13f935 100644 --- a/src/core/hle/service/fs/file.cpp +++ b/src/core/hle/service/fs/file.cpp @@ -169,6 +169,7 @@ void File::Write(Kernel::HLERequestContext& ctx) { u64 offset = rp.Pop(); u32 length = rp.Pop(); u32 flags = rp.Pop(); + auto& buffer = rp.PopMappedBuffer(); LOG_TRACE(Service_FS, "Write {}: offset=0x{:x} length={}, flags=0x{:x}", GetName(), offset, length, flags); @@ -180,14 +181,13 @@ void File::Write(Kernel::HLERequestContext& ctx) { if (file->subfile) { rb.Push(FileSys::ResultUnsupportedOpenFlags); rb.Push(0); - rb.PushMappedBuffer(rp.PopMappedBuffer()); + rb.PushMappedBuffer(buffer); return; } bool flush = (flags & 0xFF) != 0, update_timestamp = (flags & 0xFF00) != 0; if (!backend->AllowsCachedReads()) { std::vector data(length); - auto& buffer = rp.PopMappedBuffer(); buffer.Read(data.data(), 0, data.size()); ResultVal written = backend->Write(offset, data.size(), flush, update_timestamp, data.data()); @@ -223,7 +223,7 @@ void File::Write(Kernel::HLERequestContext& ctx) { async_data->offset = offset; async_data->flush = flush; async_data->update_timestamp = update_timestamp; - async_data->buffer = &rp.PopMappedBuffer(); + async_data->buffer = &buffer; async_data->file = file; ctx.RunAsync(