This is an automated email from the ASF dual-hosted git repository.

bcall pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficserver.git


The following commit(s) were added to refs/heads/master by this push:
     new 84f3efe8cf Coverity 1497333: Resource leak in object in LogConfig 
(#10891)
84f3efe8cf is described below

commit 84f3efe8cf8f33434f4769e976b5bda09273a706
Author: Bryan Call <bc...@apache.org>
AuthorDate: Fri Dec 1 08:31:29 2023 -0800

    Coverity 1497333: Resource leak in object in LogConfig (#10891)
    
    hostname wasn't freed and minor cleanup
---
 include/proxy/logging/LogConfig.h | 46 ++++++++++++++++++---------------------
 include/proxy/logging/LogLimits.h |  4 ++--
 src/proxy/logging/LogConfig.cc    | 40 ++++------------------------------
 3 files changed, 27 insertions(+), 63 deletions(-)

diff --git a/include/proxy/logging/LogConfig.h 
b/include/proxy/logging/LogConfig.h
index 8a02bb1e49..3561fa5ade 100644
--- a/include/proxy/logging/LogConfig.h
+++ b/include/proxy/logging/LogConfig.h
@@ -158,7 +158,6 @@ public:
    */
   void register_rolled_log_auto_delete(std::string_view logname, int 
rolling_min_count);
 
-public:
   bool initialized             = false;
   bool reconfiguration_needed  = false;
   bool logging_space_exhausted = false;
@@ -171,31 +170,31 @@ public:
   LogFilterList filter_list;
   LogFormatList format_list;
 
-  int log_buffer_size;
-  bool log_fast_buffer;
-  int max_secs_per_buffer;
-  int max_space_mb_for_logs;
-  int max_space_mb_headroom;
-  int logfile_perm;
+  uint32_t log_buffer_size  = 10 * LOG_KILOBYTE;
+  bool log_fast_buffer      = false;
+  int max_secs_per_buffer   = 5;
+  int max_space_mb_for_logs = 100;
+  int max_space_mb_headroom = 10;
+  int logfile_perm          = 0644;
 
-  int preproc_threads;
+  int preproc_threads = 1;
 
-  Log::RollingEnabledValues rolling_enabled;
-  int rolling_interval_sec;
-  int rolling_offset_hr;
-  int rolling_size_mb;
-  int rolling_min_count;
-  int rolling_max_count;
-  bool rolling_allow_empty;
-  bool auto_delete_rolled_files;
+  Log::RollingEnabledValues rolling_enabled = Log::NO_ROLLING;
+  int rolling_interval_sec                  = 86400;
+  int rolling_offset_hr                     = 0;
+  int rolling_size_mb                       = 10;
+  int rolling_min_count                     = 0;
+  int rolling_max_count                     = 0;
+  bool rolling_allow_empty                  = false;
+  bool auto_delete_rolled_files             = false;
 
-  int sampling_frequency;
-  int file_stat_frequency;
-  int space_used_frequency;
+  int sampling_frequency   = 1;
+  int file_stat_frequency  = 16;
+  int space_used_frequency = 900;
 
-  int ascii_buffer_size;
-  int max_line_size;
-  int logbuffer_max_iobuf_index;
+  int ascii_buffer_size         = 4 * 9216;
+  int max_line_size             = 9216;
+  int logbuffer_max_iobuf_index = BUFFER_SIZE_INDEX_32K;
 
   char *hostname           = nullptr;
   char *logfile_dir        = nullptr;
@@ -204,9 +203,6 @@ public:
 private:
   bool evaluate_config();
 
-  void setup_default_values();
-
-private:
   bool m_disk_full                  = false;
   bool m_disk_low                   = false;
   bool m_partition_full             = false;
diff --git a/include/proxy/logging/LogLimits.h 
b/include/proxy/logging/LogLimits.h
index d5e7505b94..568f19386c 100644
--- a/include/proxy/logging/LogLimits.h
+++ b/include/proxy/logging/LogLimits.h
@@ -34,5 +34,5 @@ enum {
   LOG_MAX_FORMATTED_LINE   = 10240
 };
 
-#define LOG_KILOBYTE ((int64_t)1024)
-#define LOG_MEGABYTE ((int64_t)1048576)
+constexpr int64_t LOG_KILOBYTE = 1024;
+constexpr int64_t LOG_MEGABYTE = 1048576;
diff --git a/src/proxy/logging/LogConfig.cc b/src/proxy/logging/LogConfig.cc
index 4ef25ef8cf..bd80f6b91c 100644
--- a/src/proxy/logging/LogConfig.cc
+++ b/src/proxy/logging/LogConfig.cc
@@ -66,40 +66,6 @@
 #define DIAGS_LOG_FILENAME    "diags.log"
 #define MANAGER_LOG_FILENAME  "manager.log"
 
-void
-LogConfig::setup_default_values()
-{
-  hostname              = ats_strdup(Machine::instance()->host_name.c_str());
-  log_buffer_size       = static_cast<int>(10 * LOG_KILOBYTE);
-  log_fast_buffer       = false;
-  max_secs_per_buffer   = 5;
-  max_space_mb_for_logs = 100;
-  max_space_mb_headroom = 10;
-  error_log_filename    = ats_strdup("error.log");
-  logfile_perm          = 0644;
-  logfile_dir           = ats_strdup(".");
-
-  preproc_threads = 1;
-
-  rolling_enabled          = Log::NO_ROLLING;
-  rolling_interval_sec     = 86400; // 24 hours
-  rolling_offset_hr        = 0;
-  rolling_size_mb          = 10;
-  rolling_min_count        = 0;
-  rolling_max_count        = 0;
-  rolling_allow_empty      = false;
-  auto_delete_rolled_files = true;
-  roll_log_files_now       = false;
-
-  sampling_frequency   = 1;
-  file_stat_frequency  = 16;
-  space_used_frequency = 900;
-
-  ascii_buffer_size         = 4 * 9216;
-  max_line_size             = 9216; // size of pipe buffer for SunOS 5.6
-  logbuffer_max_iobuf_index = BUFFER_SIZE_INDEX_32K;
-}
-
 void
 LogConfig::reconfigure_mgmt_variables(swoc::MemSpan<void>)
 {
@@ -294,8 +260,9 @@ LogConfig::LogConfig() : 
m_partition_space_left(static_cast<int64_t>(UINT_MAX))
   // Setup the default values for all LogConfig public variables so that
   // a LogConfig object is valid upon return from the constructor even
   // if no configuration file is read
-  //
-  setup_default_values();
+  hostname           = ats_strdup(Machine::instance()->host_name.c_str());
+  error_log_filename = ats_strdup("error.log");
+  logfile_dir        = ats_strdup(".");
 }
 
 /*-------------------------------------------------------------------------
@@ -306,6 +273,7 @@ LogConfig::LogConfig() : 
m_partition_space_left(static_cast<int64_t>(UINT_MAX))
 
 LogConfig::~LogConfig()
 {
+  ats_free(hostname);
   ats_free(error_log_filename);
   ats_free(logfile_dir);
 }

Reply via email to