From f491f3dfe3342dcc8c0a4f4663a2669f2ee5c9a8 Mon Sep 17 00:00:00 2001 From: Kawe Mazidjatari <48657826+Mauler125@users.noreply.github.com> Date: Sun, 9 Feb 2025 01:37:09 +0100 Subject: [PATCH] Engine: fix regression in message processor Old regression that was caused by implementing the ability to disconnect the socket from anywhere in the rcon code, but it was never accounted for in CNetConBase::ProcessBuffer() and CNetConBase::Recv(). ProcessBuffer() must return directly when ProcessMessage() failed, and Recv() must break out if ProcessBuffer() returned false. --- src/engine/shared/base_rcon.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/engine/shared/base_rcon.cpp b/src/engine/shared/base_rcon.cpp index 5878e15d..28d5ccd1 100644 --- a/src/engine/shared/base_rcon.cpp +++ b/src/engine/shared/base_rcon.cpp @@ -147,7 +147,6 @@ bool CNetConBase::Connect(const char* pHostName, const int nPort) bool CNetConBase::ProcessBuffer(CConnectedNetConsoleData& data, const char* pRecvBuf, int nRecvLen, const int nMaxLen) { - bool bSuccess = true; byte prefix[sizeof(u_long)] = {}; while (nRecvLen > 0) @@ -164,10 +163,9 @@ bool CNetConBase::ProcessBuffer(CConnectedNetConsoleData& data, if (data.m_nPayloadRead == data.m_nPayloadLen) { if (!ProcessMessage( - reinterpret_cast(data.m_RecvBuffer.data()), data.m_nPayloadLen) - && bSuccess) + reinterpret_cast(data.m_RecvBuffer.data()), data.m_nPayloadLen)) { - bSuccess = false; + return false; } data.m_nPayloadLen = 0; @@ -214,7 +212,7 @@ bool CNetConBase::ProcessBuffer(CConnectedNetConsoleData& data, } } - return bSuccess; + return true; } //----------------------------------------------------------------------------- @@ -342,7 +340,9 @@ void CNetConBase::Recv(CConnectedNetConsoleData& data, const int nMaxLen) } nReadLen -= nRecvLen; // Process what we've got. - ProcessBuffer(data, szRecvBuf, nRecvLen, nMaxLen); + + if (!ProcessBuffer(data, szRecvBuf, nRecvLen, nMaxLen)) + break; } return;