From b0423ee74b08878e8aafc3995eafc0dc04ffbe9b Mon Sep 17 00:00:00 2001 From: Kawe Mazidjatari <48657826+Mauler125@users.noreply.github.com> Date: Sun, 9 Feb 2025 01:58:32 +0100 Subject: [PATCH] Engine: use a more sane limit for desync check m_RecvBuffer.max_size() can be very large, just check on RCON_MAX_PAYLOAD_SIZE (1 MiB), if its larger than that, then the stream has definitely being desynced or malformed. Also drop the client on null payloads because the payload should never be 0. --- src/engine/shared/base_rcon.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/engine/shared/base_rcon.cpp b/src/engine/shared/base_rcon.cpp index 28d5ccd1..3cbb9617 100644 --- a/src/engine/shared/base_rcon.cpp +++ b/src/engine/shared/base_rcon.cpp @@ -197,8 +197,7 @@ bool CNetConBase::ProcessBuffer(CConnectedNetConsoleData& data, } } - if (data.m_nPayloadLen < 0 || - data.m_nPayloadLen > data.m_RecvBuffer.max_size()) + if (data.m_nPayloadLen <= 0 || data.m_nPayloadLen > RCON_MAX_PAYLOAD_SIZE) { Error(eDLL_T::ENGINE, NO_ERROR, "RCON Cmd: sync error (%d)\n", data.m_nPayloadLen); Disconnect("desync"); // Out of sync (irrecoverable).