From 83c0dea2e40eec14e770083fc764cf5250c5c439 Mon Sep 17 00:00:00 2001 From: "Jerry (Xinyu Hou)" Date: Thu, 14 Jul 2016 07:55:13 -0700 Subject: [PATCH] #4792 Calculated log message size rather than using fixed size --- src/lib/base/Log.cpp | 25 ++++++++++++++++++------- src/lib/base/Log.h | 2 -- src/lib/synergy/ProtocolUtil.cpp | 6 +----- 3 files changed, 19 insertions(+), 14 deletions(-) diff --git a/src/lib/base/Log.cpp b/src/lib/base/Log.cpp index 7ad8ae1b..42389bda 100644 --- a/src/lib/base/Log.cpp +++ b/src/lib/base/Log.cpp @@ -172,22 +172,33 @@ Log::print(const char* file, int line, const char* fmt, ...) // do not prefix time and file for kPRINT (CLOG_PRINT) if (priority != kPRINT) { - char message[kLogMessageLength]; - struct tm *tm; - char tmp[220]; + char timestamp[50]; time_t t; time(&t); tm = localtime(&t); - sprintf(tmp, "%04i-%02i-%02iT%02i:%02i:%02i", tm->tm_year + 1900, tm->tm_mon+1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec); + sprintf(timestamp, "%04i-%02i-%02iT%02i:%02i:%02i", tm->tm_year + 1900, tm->tm_mon+1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec); -#ifndef NDEBUG - sprintf(message, "[%s] %s: %s\n\t%s,%d", tmp, g_priority[priority], buffer, file, line); + // square brackets, spaces, comma and null terminator take about 10 + int size = 10; + size += strlen(timestamp); + size += strlen(g_priority[priority]); + size += strlen(buffer); +#ifndef NDEBUG + size += strlen(file); + // assume there is no file contains over 100k lines of code + size += 6; +#endif + char* message = new char[size]; + +#ifndef NDEBUG + sprintf(message, "[%s] %s: %s\n\t%s,%d", timestamp, g_priority[priority], buffer, file, line); #else - sprintf(message, "[%s] %s: %s", tmp, g_priority[priority], buffer); + sprintf(message, "[%s] %s: %s", timestamp, g_priority[priority], buffer); #endif output(priority, message); + delete[] message; } else { output(priority, buffer); } diff --git a/src/lib/base/Log.h b/src/lib/base/Log.h index eaa2c8a8..ab36ce6a 100644 --- a/src/lib/base/Log.h +++ b/src/lib/base/Log.h @@ -139,8 +139,6 @@ private: int m_maxPriority; }; -const UInt16 kLogMessageLength = 2048; - /*! \def LOG(arg) Write to the log. Because macros cannot accept variable arguments, this diff --git a/src/lib/synergy/ProtocolUtil.cpp b/src/lib/synergy/ProtocolUtil.cpp index ee73bebf..d5e0aed7 100644 --- a/src/lib/synergy/ProtocolUtil.cpp +++ b/src/lib/synergy/ProtocolUtil.cpp @@ -230,11 +230,7 @@ ProtocolUtil::vreadf(synergy::IStream* stream, const char* fmt, va_list args) throw; } - // don't cause buffer overrun, using +100 chars in case - // someone modifies this log message in future. - if (len + 100 < kLogMessageLength) { - LOG((CLOG_DEBUG2 "readf: read %d byte string: %.*s", len, len, sBuffer)); - } + LOG((CLOG_DEBUG2 "readf: read %d byte string: %.*s", len, len, sBuffer)); // save the data String* dst = va_arg(args, String*);