System: Fix implicit 32-bit truncation of screenshot size

pull/3782/head
Stenzek 2 months ago
parent ebd090340d
commit 1fbfbb57da
No known key found for this signature in database

@ -200,7 +200,7 @@ static bool LoadOneRewindState();
static bool LoadStateFromBuffer(const SaveStateBuffer& buffer, Error* error, bool update_display); static bool LoadStateFromBuffer(const SaveStateBuffer& buffer, Error* error, bool update_display);
static bool LoadStateBufferFromFile(SaveStateBuffer* buffer, std::FILE* fp, Error* error, bool read_title, static bool LoadStateBufferFromFile(SaveStateBuffer* buffer, std::FILE* fp, Error* error, bool read_title,
bool read_media_path, bool read_screenshot, bool read_data); bool read_media_path, bool read_screenshot, bool read_data);
static bool ReadAndDecompressStateData(std::FILE* fp, std::span<u8> dst, u32 file_offset, u32 compressed_size, static bool ReadAndDecompressStateData(std::FILE* fp, std::span<u8> dst, u32 file_offset, size_t compressed_size,
SAVE_STATE_HEADER::CompressionType method, Error* error); SAVE_STATE_HEADER::CompressionType method, Error* error);
static bool SaveStateToBuffer(SaveStateBuffer* buffer, Error* error, u32 screenshot_size = 256); static bool SaveStateToBuffer(SaveStateBuffer* buffer, Error* error, u32 screenshot_size = 256);
static bool SaveStateBufferToFile(const SaveStateBuffer& buffer, std::FILE* fp, Error* error, static bool SaveStateBufferToFile(const SaveStateBuffer& buffer, std::FILE* fp, Error* error,
@ -2999,7 +2999,7 @@ bool System::LoadStateBufferFromFile(SaveStateBuffer* buffer, std::FILE* fp, Err
if (read_screenshot) if (read_screenshot)
{ {
buffer->screenshot.Resize(header.screenshot_width, header.screenshot_height, ImageFormat::RGBA8, true); buffer->screenshot.Resize(header.screenshot_width, header.screenshot_height, ImageFormat::RGBA8, true);
const u32 compressed_size = const size_t compressed_size =
(header.version >= 69) ? header.screenshot_compressed_size : buffer->screenshot.GetStorageSize(); (header.version >= 69) ? header.screenshot_compressed_size : buffer->screenshot.GetStorageSize();
const SAVE_STATE_HEADER::CompressionType compression_type = const SAVE_STATE_HEADER::CompressionType compression_type =
(header.version >= 69) ? static_cast<SAVE_STATE_HEADER::CompressionType>(header.screenshot_compression_type) : (header.version >= 69) ? static_cast<SAVE_STATE_HEADER::CompressionType>(header.screenshot_compression_type) :
@ -3029,7 +3029,7 @@ bool System::LoadStateBufferFromFile(SaveStateBuffer* buffer, std::FILE* fp, Err
return true; return true;
} }
bool System::ReadAndDecompressStateData(std::FILE* fp, std::span<u8> dst, u32 file_offset, u32 compressed_size, bool System::ReadAndDecompressStateData(std::FILE* fp, std::span<u8> dst, u32 file_offset, size_t compressed_size,
SAVE_STATE_HEADER::CompressionType method, Error* error) SAVE_STATE_HEADER::CompressionType method, Error* error)
{ {
if (!FileSystem::FSeek64(fp, file_offset, SEEK_SET, error)) if (!FileSystem::FSeek64(fp, file_offset, SEEK_SET, error))

Loading…
Cancel
Save