From 10f76b702efddec5b2600eb8765303045dfdbe5f Mon Sep 17 00:00:00 2001 From: Bryan Call Date: Fri, 20 Jan 2023 13:47:05 -0800 Subject: [PATCH 1/2] Memory leaks with storing configuration filenames --- mgmt/config/AddConfigFilesHere.cc | 5 +++-- mgmt/config/FileManager.cc | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/mgmt/config/AddConfigFilesHere.cc b/mgmt/config/AddConfigFilesHere.cc index 685817ccb4d..52042839c31 100644 --- a/mgmt/config/AddConfigFilesHere.cc +++ b/mgmt/config/AddConfigFilesHere.cc @@ -27,6 +27,7 @@ #include "tscore/Diags.h" #include "FileManager.h" #include "tscore/Errata.h" +#include "tscore/ink_memory.h" static constexpr bool REQUIRED{true}; static constexpr bool NOT_REQUIRED{false}; @@ -39,8 +40,8 @@ static constexpr bool NOT_REQUIRED{false}; void registerFile(const char *configName, const char *defaultName, bool isRequired) { - bool found = false; - const char *fname = REC_readString(configName, &found); + bool found = false; + ats_scoped_str fname(REC_readString(configName, &found)); if (!found) { fname = defaultName; } diff --git a/mgmt/config/FileManager.cc b/mgmt/config/FileManager.cc index a28d5dbf5e5..fd084cdf066 100644 --- a/mgmt/config/FileManager.cc +++ b/mgmt/config/FileManager.cc @@ -388,6 +388,7 @@ FileManager::ConfigManager::ConfigManager(const char *fileName_, const char *con FileManager::ConfigManager::~ConfigManager() { ats_free(fileName); + ats_free(configName); } // From 19e13ae47075142b417da2a640a16013e11d95f9 Mon Sep 17 00:00:00 2001 From: Bryan Call Date: Fri, 27 Jan 2023 10:09:10 -0800 Subject: [PATCH 2/2] Don't reassign the ats_scoped_str --- mgmt/config/AddConfigFilesHere.cc | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/mgmt/config/AddConfigFilesHere.cc b/mgmt/config/AddConfigFilesHere.cc index 52042839c31..40cc844c73e 100644 --- a/mgmt/config/AddConfigFilesHere.cc +++ b/mgmt/config/AddConfigFilesHere.cc @@ -27,7 +27,6 @@ #include "tscore/Diags.h" #include "FileManager.h" #include "tscore/Errata.h" -#include "tscore/ink_memory.h" static constexpr bool REQUIRED{true}; static constexpr bool NOT_REQUIRED{false}; @@ -42,10 +41,7 @@ registerFile(const char *configName, const char *defaultName, bool isRequired) { bool found = false; ats_scoped_str fname(REC_readString(configName, &found)); - if (!found) { - fname = defaultName; - } - FileManager::instance().addFile(fname, configName, false, isRequired); + FileManager::instance().addFile(found ? fname : defaultName, configName, false, isRequired); } //