From d2da2f17fd66291567f8853506d6e728fea1fdd0 Mon Sep 17 00:00:00 2001 From: Sam V Date: Wed, 21 Feb 2024 23:41:36 +0100 Subject: [PATCH] Fix double decrement of buffer size variable in localization code --- cl_dll/text_message.cpp | 33 +++++++++++++++------------------ 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/cl_dll/text_message.cpp b/cl_dll/text_message.cpp index db266f381..6c5e039be 100644 --- a/cl_dll/text_message.cpp +++ b/cl_dll/text_message.cpp @@ -57,7 +57,7 @@ char* CHudTextMessage::LocaliseTextString(const char* msg, char* dst_buffer, int // Subtract one so we have space for the null terminator no matter what. std::size_t remainingBufferSize = buffer_size - 1; - for (const char* src = msg; *src != '\0' && remainingBufferSize > 0; --remainingBufferSize) + for (const char* src = msg; *src != '\0' && remainingBufferSize > 0;) { if (*src == '#') { @@ -90,29 +90,26 @@ char* CHudTextMessage::LocaliseTextString(const char* msg, char* dst_buffer, int // lookup msg name in titles.txt client_textmessage_t* clmsg = TextMessageGet(word_buf); - if (!clmsg || !(clmsg->pMessage)) + if (clmsg && clmsg->pMessage) { - src = word_start; - *dst = *src; - dst++; - src++; + // copy string into message over the msg name + const std::size_t count = std::min(remainingBufferSize, std::strlen(clmsg->pMessage)); + + std::strncpy(dst, clmsg->pMessage, count); + + dst += count; + remainingBufferSize -= count; continue; } - // copy string into message over the msg name - const std::size_t count = std::min(remainingBufferSize, std::strlen(clmsg->pMessage)); + src = word_start; + } - std::strncpy(dst, clmsg->pMessage, count); + *dst = *src; + dst++; + src++; - dst += count; - remainingBufferSize -= count; - } - else - { - *dst = *src; - dst++; - src++; - } + --remainingBufferSize; } *dst = '\0'; // ensure null termination