From 0dace8eea353e8051cd88405cd77a9d762ebe85b Mon Sep 17 00:00:00 2001 From: Kawe Mazidjatari <48657826+Mauler125@users.noreply.github.com> Date: Sat, 4 Feb 2023 01:34:08 +0100 Subject: [PATCH] Fix crash during init If an error occurs during init, and 'Error' is called, the program will segfault. Fixed by only running the 'send' code from RCON after it has been initialized. --- r5dev/engine/server/sv_rcon.cpp | 12 +++++++++++- r5dev/engine/server/sv_rcon.h | 4 ++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/r5dev/engine/server/sv_rcon.cpp b/r5dev/engine/server/sv_rcon.cpp index 998f435f..c56e9903 100644 --- a/r5dev/engine/server/sv_rcon.cpp +++ b/r5dev/engine/server/sv_rcon.cpp @@ -81,7 +81,7 @@ void CRConServer::Think(void) for (m_nConnIndex = nCount - 1; m_nConnIndex >= 0; m_nConnIndex--) { const netadr_t& netAdr = m_Socket.GetAcceptedSocketAddress(m_nConnIndex); - if (strcmp(netAdr.ToString(true), sv_rcon_whitelist_address->GetString()) != 0) // TODO: doesn't work + if (strcmp(netAdr.ToString(true), sv_rcon_whitelist_address->GetString()) != 0) { const CConnectedNetConsoleData* pData = m_Socket.GetAcceptedSocketData(m_nConnIndex); if (!pData->m_bAuthorized) @@ -195,6 +195,11 @@ void CRConServer::Send(const SocketHandle_t hSocket, const std::string& svMessag //----------------------------------------------------------------------------- void CRConServer::Send(const std::string& svRspBuf, const std::string& svRspVal, const sv_rcon::response_t responseType, const int nResponseId) { + if (!m_bInitialized) + { + return; + } + if (responseType == sv_rcon::response_t::SERVERDATA_RESPONSE_CONSOLE_LOG) { if (!sv_rcon_sendlogs->GetBool()) @@ -215,6 +220,11 @@ void CRConServer::Send(const std::string& svRspBuf, const std::string& svRspVal, //----------------------------------------------------------------------------- void CRConServer::Send(const SocketHandle_t hSocket, const std::string& svRspBuf, const std::string& svRspVal, const sv_rcon::response_t responseType, const int nResponseId) { + if (!m_bInitialized) + { + return; + } + if (responseType == sv_rcon::response_t::SERVERDATA_RESPONSE_CONSOLE_LOG) { if (!sv_rcon_sendlogs->GetBool()) diff --git a/r5dev/engine/server/sv_rcon.h b/r5dev/engine/server/sv_rcon.h index 4b36391f..0485a9b4 100644 --- a/r5dev/engine/server/sv_rcon.h +++ b/r5dev/engine/server/sv_rcon.h @@ -22,8 +22,6 @@ public: void Think(void); void RunFrame(void); - void Send(const std::string& svMessage) const; - void Send(const SocketHandle_t hSocket, const std::string& svMessage) const; void Send(const std::string& svRspBuf, const std::string& svRspVal, const sv_rcon::response_t responseType, const int nResponseId = -4); void Send(const SocketHandle_t hSocket, const std::string& svRspBuf, const std::string& svRspVal, const sv_rcon::response_t responseType, const int nResponseId = -4); void Recv(void); @@ -46,6 +44,8 @@ public: bool IsInitialized(void) const; private: + void Send(const std::string& svMessage) const; + void Send(const SocketHandle_t hSocket, const std::string& svMessage) const; bool m_bInitialized; int m_nConnIndex;