From f56b2fedb2338c79e08811570ca68e20e38e9c29 Mon Sep 17 00:00:00 2001 From: Mikhail Filimonov Date: Tue, 11 Mar 2025 14:08:15 +0100 Subject: [PATCH] Fix MemorySanitizer Warning by Reordering Member Variables in KafkaHandleBase The MemorySanitizer detected a use-of-uninitialized-value issue caused by the destruction order in KafkaHandleBase. Specifically, the deleter of the Kafka handle accessed destroy_flags_ after it had been destroyed because destroy_flags_ was declared after handle_. This commit reorders the member declarations so that destroy_flags_ is declared before handle_. The constructor's initializer list is also updated accordingly to match the new declaration order. --- include/cppkafka/kafka_handle_base.h | 2 +- src/kafka_handle_base.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/include/cppkafka/kafka_handle_base.h b/include/cppkafka/kafka_handle_base.h index 185f4e78..ebd97562 100644 --- a/include/cppkafka/kafka_handle_base.h +++ b/include/cppkafka/kafka_handle_base.h @@ -391,8 +391,8 @@ class CPPKAFKA_API KafkaHandleBase { Configuration config_; TopicConfigurationMap topic_configurations_; std::mutex topic_configurations_mutex_; - HandlePtr handle_; int destroy_flags_; + HandlePtr handle_; }; } // cppkafka diff --git a/src/kafka_handle_base.cpp b/src/kafka_handle_base.cpp index 3d1dc7fa..f88720ef 100644 --- a/src/kafka_handle_base.cpp +++ b/src/kafka_handle_base.cpp @@ -48,7 +48,7 @@ namespace cppkafka { const milliseconds KafkaHandleBase::DEFAULT_TIMEOUT{1000}; KafkaHandleBase::KafkaHandleBase(Configuration config) -: timeout_ms_(DEFAULT_TIMEOUT), config_(move(config)), handle_(nullptr, HandleDeleter(this)), destroy_flags_(0) { +: timeout_ms_(DEFAULT_TIMEOUT), config_(move(config)), destroy_flags_(0), handle_(nullptr, HandleDeleter(this)) { auto& maybe_config = config_.get_default_topic_configuration(); if (maybe_config) { maybe_config->set_as_opaque();