[CobaltService] Don't read unititialized memory
asan discovered an issue where an unititialized unique_ptr is read, at
which point it may contain garbage pointer data.
Change-Id: Ic68b99a1db28b7f492bda456758eca4b09fd8c5f
diff --git a/src/public/cobalt_service.cc b/src/public/cobalt_service.cc
index 01b8779..42242a5 100644
--- a/src/public/cobalt_service.cc
+++ b/src/public/cobalt_service.cc
@@ -121,21 +121,27 @@
&logger_encoder_, event_aggregator_manager_.GetEventAggregator(), &observation_writer_,
&system_data_)),
validated_clock_(cfg.validated_clock),
- internal_logger_(NewLogger(std::move(cfg.internal_logger_project_context))) {
+ internal_logger_(NewLogger(std::move(cfg.internal_logger_project_context), false)) {
shipping_manager_->Start();
}
std::unique_ptr<logger::Logger> CobaltService::NewLogger(
std::unique_ptr<logger::ProjectContext> project_context) {
+ return NewLogger(std::move(project_context), true);
+}
+
+std::unique_ptr<logger::Logger> CobaltService::NewLogger(
+ std::unique_ptr<logger::ProjectContext> project_context, bool include_internal_logger) {
+ auto logger = include_internal_logger ? internal_logger_.get() : nullptr;
if (undated_event_manager_) {
- return std::make_unique<logger::Logger>(
- std::move(project_context), &logger_encoder_,
- event_aggregator_manager_.GetEventAggregator(), &observation_writer_, &system_data_,
- validated_clock_.get(), undated_event_manager_, internal_logger_.get());
+ return std::make_unique<logger::Logger>(std::move(project_context), &logger_encoder_,
+ event_aggregator_manager_.GetEventAggregator(),
+ &observation_writer_, &system_data_,
+ validated_clock_.get(), undated_event_manager_, logger);
}
- return std::make_unique<logger::Logger>(
- std::move(project_context), &logger_encoder_, event_aggregator_manager_.GetEventAggregator(),
- &observation_writer_, &system_data_, internal_logger_.get());
+ return std::make_unique<logger::Logger>(std::move(project_context), &logger_encoder_,
+ event_aggregator_manager_.GetEventAggregator(),
+ &observation_writer_, &system_data_, logger);
}
void CobaltService::SystemClockIsAccurate(std::unique_ptr<util::SystemClockInterface> system_clock,
diff --git a/src/public/cobalt_service.h b/src/public/cobalt_service.h
index 625eef0..9dd3939 100644
--- a/src/public/cobalt_service.h
+++ b/src/public/cobalt_service.h
@@ -54,6 +54,11 @@
std::unique_ptr<logger::Logger> NewLogger(
std::unique_ptr<logger::ProjectContext> project_context);
+ private:
+ std::unique_ptr<logger::Logger> NewLogger(std::unique_ptr<logger::ProjectContext> project_context,
+ bool include_internal_logger);
+
+ public:
// SystemClockIsAccurate lets CobaltService know that it no longer needs to maintain an
// UndatedEventManager, and can flush the data from it into the observation store.
//