From 25db163347205d95fbcd888a86147aee03ecaac2 Mon Sep 17 00:00:00 2001 From: Stenzek Date: Fri, 8 Mar 2024 04:10:13 +1000 Subject: [PATCH] System: Fix incorrect save state screenshot size --- src/core/system.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/core/system.cpp b/src/core/system.cpp index dff56bb56..9965d9399 100644 --- a/src/core/system.cpp +++ b/src/core/system.cpp @@ -2471,7 +2471,7 @@ bool System::SaveStateToStream(ByteStream* state, u32 screenshot_size /* = 256 * header.offset_to_screenshot = static_cast(state->GetPosition()); header.screenshot_width = screenshot_width; header.screenshot_height = screenshot_height; - header.screenshot_size = static_cast(screenshot_buffer.size()); + header.screenshot_size = static_cast(screenshot_buffer.size() * sizeof(u32)); if (!state->Write2(screenshot_buffer.data(), header.screenshot_size)) return false; } @@ -4480,7 +4480,8 @@ std::optional System::InternalGetExtendedSaveStateInfo(By std::string().swap(ssi.media_path); } - if (header.screenshot_width > 0 && header.screenshot_height > 0 && header.screenshot_size > 0 && + if (header.screenshot_width > 0 && header.screenshot_height > 0 && + header.screenshot_size >= (header.screenshot_width * header.screenshot_height * sizeof(u32)) && (static_cast(header.offset_to_screenshot) + static_cast(header.screenshot_size)) <= stream->GetSize()) { stream->SeekAbsolute(header.offset_to_screenshot);