From c3155917c58209edfc8662b5ff4743ffa8b7eb94 Mon Sep 17 00:00:00 2001 From: OxBat Date: Tue, 27 Jan 2026 16:50:33 +0100 Subject: [PATCH] Fix infinite loop in TelnetAppender caused by small payloads Enforce a minimum buffer size allocation to satisfy UTF8CharsetEncoder requirements and prevent infinite retry loops when logging short messages. --- src/main/cpp/telnetappender.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/cpp/telnetappender.cpp b/src/main/cpp/telnetappender.cpp index cc3b14394..231ea8954 100644 --- a/src/main/cpp/telnetappender.cpp +++ b/src/main/cpp/telnetappender.cpp @@ -205,7 +205,8 @@ void TelnetAppender::write(ByteBuffer& buf) void TelnetAppender::writeStatus(const SocketPtr& socket, const LogString& msg, Pool& p) { - size_t bytesSize = msg.size() * 2; + // Ensure minimum buffer size to prevent infinite loop in encoder with short messages + size_t bytesSize = (msg.size() * 2 > 1024) ? msg.size() * 2 : 1024; char* bytes = p.pstralloc(bytesSize); LogString::const_iterator msgIter(msg.begin()); @@ -232,7 +233,8 @@ void TelnetAppender::append(const spi::LoggingEventPtr& event, Pool& p) else msg = event->getRenderedMessage(); msg.append(LOG4CXX_STR("\r\n")); - size_t bytesSize = msg.size() * 2; + // Ensure minimum buffer size to prevent infinite loop in encoder with short messages + size_t bytesSize = (msg.size() * 2 > 1024) ? msg.size() * 2 : 1024; char* bytes = p.pstralloc(bytesSize); LogString::const_iterator msgIter(msg.begin());