From c122edd6383901c10483511ac1b1960888e217ac Mon Sep 17 00:00:00 2001 From: Megamouse Date: Wed, 19 Aug 2026 20:35:31 +0200 Subject: [PATCH] unpkg: Fix buffer size checks --- rpcs3/Crypto/unpkg.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/rpcs3/Crypto/unpkg.cpp b/rpcs3/Crypto/unpkg.cpp index 80c74197ce..da503bc85f 100644 --- a/rpcs3/Crypto/unpkg.cpp +++ b/rpcs3/Crypto/unpkg.cpp @@ -1216,10 +1216,14 @@ void package_reader::extract_worker() while (read_size < size) { const u64 block_size = std::min(BUF_SIZE, size - read_size); - const u64 available_buffer_size = buffer.size() - read_size; + u64 available_buffer_size = original_size - read_size; + + if (buffer.data() == ptr) + { + available_buffer_size = buffer.size() - read_size; + ensure(buffer.size() == original_size + BUF_PADDING); + } - ensure(buffer.data() == ptr); - ensure(buffer.size() == original_size + BUF_PADDING); ensure(available_buffer_size >= block_size); const usz advance_size = decrypt(entry.file_offset + pos, block_size, is_psp ? PKG_AES_KEY2 : m_dec_key.data(), std::span{static_cast(ptr) + read_size, available_buffer_size});