From 2d1128db76c80e71cf7629a0846d69a7aa607117 Mon Sep 17 00:00:00 2001 From: aliaspider Date: Thu, 22 Mar 2018 22:04:49 +0100 Subject: [PATCH] fix va_list reuse without a va_copy. --- Common/LogManager.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Common/LogManager.cpp b/Common/LogManager.cpp index 57dde3beff..50375b8c21 100644 --- a/Common/LogManager.cpp +++ b/Common/LogManager.cpp @@ -245,16 +245,20 @@ void LogManager::Log(LogTypes::LOG_LEVELS level, LogTypes::LOG_TYPE type, const } char msgBuf[1024]; + va_list args_copy; + + va_copy(args_copy, args); size_t neededBytes = vsnprintf(msgBuf, sizeof(msgBuf), format, args); if (neededBytes > sizeof(msgBuf)) { // Needed more space? Re-run vsnprintf. message.msg.resize(neededBytes + 1); - vsnprintf(&message.msg[0], neededBytes + 1, format, args); + vsnprintf(&message.msg[0], neededBytes + 1, format, args_copy); } else { message.msg.resize(neededBytes + 1); memcpy(&message.msg[0], msgBuf, neededBytes); } message.msg[message.msg.size() - 1] = '\n'; + va_end(args_copy); std::lock_guard listeners_lock(listeners_lock_); for (auto &iter : listeners_) {