From 8889f490ce8e4fc0e7f7b9c47f8ef46f5a509cf3 Mon Sep 17 00:00:00 2001 From: moneromooo-monero Date: Sat, 13 Feb 2021 12:26:28 +0000 Subject: [PATCH] easylogging++: fix potential memory corruption The m_typedConfigurations pointer is copied from one object to the next, but deleted in the dtor, leading to potential double free. It is also deleted first thing in the copy ctor, deleting uninitialized memory. This does not seem to actually happen in practice (those functions do not get called), but seems safer that way. Coverity 1446562 --- external/easylogging++/easylogging++.cc | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/external/easylogging++/easylogging++.cc b/external/easylogging++/easylogging++.cc index bf877c018..277de1178 100644 --- a/external/easylogging++/easylogging++.cc +++ b/external/easylogging++/easylogging++.cc @@ -713,9 +713,8 @@ Logger::Logger(const std::string& id, const Configurations& configurations, } Logger::Logger(const Logger& logger) { - base::utils::safeDelete(m_typedConfigurations); m_id = logger.m_id; - m_typedConfigurations = logger.m_typedConfigurations; + m_typedConfigurations = logger.m_typedConfigurations ? new base::TypedConfigurations(*logger.m_typedConfigurations) : nullptr; m_parentApplicationName = logger.m_parentApplicationName; m_isConfigured = logger.m_isConfigured; m_configurations = logger.m_configurations; @@ -727,7 +726,7 @@ Logger& Logger::operator=(const Logger& logger) { if (&logger != this) { base::utils::safeDelete(m_typedConfigurations); m_id = logger.m_id; - m_typedConfigurations = logger.m_typedConfigurations; + m_typedConfigurations = logger.m_typedConfigurations ? new base::TypedConfigurations(*logger.m_typedConfigurations) : nullptr; m_parentApplicationName = logger.m_parentApplicationName; m_isConfigured = logger.m_isConfigured; m_configurations = logger.m_configurations;