From 847b721558d0fd14c19317a84f7e0969b86c9bc5 Mon Sep 17 00:00:00 2001 From: Eladash <18193363+elad335@users.noreply.github.com> Date: Fri, 29 Dec 2023 18:25:47 +0200 Subject: [PATCH] Compression: Fix infinite loop Always keep expanding the buffer even if avail_in is 0 --- rpcs3/util/serialization_ext.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rpcs3/util/serialization_ext.cpp b/rpcs3/util/serialization_ext.cpp index 3b3870c65e..527192f100 100644 --- a/rpcs3/util/serialization_ext.cpp +++ b/rpcs3/util/serialization_ext.cpp @@ -289,7 +289,7 @@ bool compressed_serialization_file_handler::handle_file_op(utils::serial& ar, us while (true) { // Avoid flooding RAM, wait if there is too much pending memory - const usz new_value = m_pending_bytes.atomic_op([&](usz v) + const usz new_value = m_pending_bytes.atomic_op([&](usz& v) { v &= ~pending_data_wait_bit; @@ -647,7 +647,7 @@ void compressed_serialization_file_handler::stream_data_prepare_thread_op() if (m_zs.avail_out == 0) { - m_stream_data.resize(m_stream_data.size() + (m_zs.avail_in + 3ull) / 4); + m_stream_data.resize(m_stream_data.size() + (m_zs.avail_in / 4) + (m_stream_data.size() / 16) + 1); } } while (m_zs.avail_out == 0 || m_zs.avail_in != 0);