From bd8b9e8c772ebf3ee9bb078630cd6f0ba4bd39bd Mon Sep 17 00:00:00 2001 From: Kawe Mazidjatari <48657826+Mauler125@users.noreply.github.com> Date: Sun, 9 Apr 2023 22:22:06 +0200 Subject: [PATCH] Improve server print messages Always format with a newline if one is missing. Calculate string size directly from 'ReadString' in 'SVC_UserMessage::ProcessImpl'. Added additional asserts to detect code errors. --- r5dev/common/netmessages.cpp | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/r5dev/common/netmessages.cpp b/r5dev/common/netmessages.cpp index 09f0397f..20a47a72 100644 --- a/r5dev/common/netmessages.cpp +++ b/r5dev/common/netmessages.cpp @@ -16,7 +16,15 @@ bool SVC_Print::ProcessImpl() { if (this->m_szText) { - DevMsg(eDLL_T::SERVER, "%s", this->m_szText); + Assert(m_szText == m_szTextBuffer); // Should always point to 'm_szTextBuffer'. + + size_t len = strnlen_s(m_szText, sizeof(m_szTextBuffer)); + Assert(len < sizeof(m_szTextBuffer)); + + if (len < sizeof(m_szTextBuffer)) + { + DevMsg(eDLL_T::SERVER, m_szText[len-1] == '\n' ? "%s" : "%s\n", m_szText); + } } return true; // Original just return true also. @@ -31,10 +39,14 @@ bool SVC_UserMessage::ProcessImpl() type == HUD_PRINTCENTER) { char text[MAX_USER_MSG_DATA]; - buf.ReadString(text, sizeof(text)); - if (strnlen_s(text, sizeof(text)) >= NET_MIN_MESSAGE) + int len; + + buf.ReadString(text, sizeof(text), false, &len); + Assert(len < sizeof(text)); + + if (len >= NET_MIN_MESSAGE && len < sizeof(text)) { - DevMsg(eDLL_T::SERVER, "%s", text); + DevMsg(eDLL_T::SERVER, text[len-1] == '\n' ? "%s" : "%s\n", text); } }