From 50279285fc9eb1c665fcecdce6f56ab8d3da9ec4 Mon Sep 17 00:00:00 2001 From: Kai Sommerfeld Date: Mon, 17 Dec 2018 15:55:51 +0100 Subject: [PATCH] 4.4.5 - Fix buffer overflow in Logger::Log --- pvr.hts/addon.xml.in | 2 +- pvr.hts/changelog.txt | 9 +++++++++ src/tvheadend/utilities/Logger.cpp | 15 ++++++++------- src/tvheadend/utilities/Logger.h | 2 -- 4 files changed, 18 insertions(+), 10 deletions(-) diff --git a/pvr.hts/addon.xml.in b/pvr.hts/addon.xml.in index 43c0cba7..192cd17b 100644 --- a/pvr.hts/addon.xml.in +++ b/pvr.hts/addon.xml.in @@ -1,7 +1,7 @@ @ADDON_DEPENDS@ diff --git a/pvr.hts/changelog.txt b/pvr.hts/changelog.txt index ad192379..d4967803 100644 --- a/pvr.hts/changelog.txt +++ b/pvr.hts/changelog.txt @@ -1,3 +1,12 @@ +4.4.5 +- Fixed buffer overflow in Logger::Log + +4.4.4 +- updated language files from Transifex + +4.4.3 +- updated language files from Transifex + 4.4.2 - Fix RDS stream support. Only mpeg2 audio streams can contain embedded RDS data and there can be at most one RDS stream at a time. diff --git a/src/tvheadend/utilities/Logger.cpp b/src/tvheadend/utilities/Logger.cpp index 5414442c..835a14d0 100644 --- a/src/tvheadend/utilities/Logger.cpp +++ b/src/tvheadend/utilities/Logger.cpp @@ -21,7 +21,7 @@ #include "Logger.h" -#include +#include "p8-platform/util/StringUtils.h" using namespace tvheadend::utilities; @@ -44,20 +44,21 @@ void Logger::Log(LogLevel level, const char *message, ...) { auto &logger = GetInstance(); - char buffer[MESSAGE_BUFFER_SIZE]; - std::string logMessage = message; - std::string prefix = logger.m_prefix; + std::string logMessage; // Prepend the prefix when set + const std::string prefix = logger.m_prefix; if (!prefix.empty()) - logMessage = prefix + " - " + message; + logMessage = prefix + " - "; + + logMessage += message; va_list arguments; va_start(arguments, message); - vsprintf(buffer, logMessage.c_str(), arguments); + logMessage = StringUtils::FormatV(logMessage.c_str(), arguments); va_end(arguments); - logger.m_implementation(level, buffer); + logger.m_implementation(level, logMessage.c_str()); } void Logger::SetImplementation(LoggerImplementation implementation) diff --git a/src/tvheadend/utilities/Logger.h b/src/tvheadend/utilities/Logger.h index 8595e66b..645405f7 100644 --- a/src/tvheadend/utilities/Logger.h +++ b/src/tvheadend/utilities/Logger.h @@ -80,8 +80,6 @@ namespace tvheadend void SetPrefix(const std::string &prefix); private: - static const unsigned int MESSAGE_BUFFER_SIZE = 16384; - Logger(); /**