From 9b0fe744f2805555d5ab0312b2098b1049f2ed31 Mon Sep 17 00:00:00 2001 From: Jon Siwek Date: Mon, 23 Jul 2012 16:47:44 -0500 Subject: [PATCH] Fix WriterBackend::WriterInfo serialization, reenable ascii start/end tags. Instantiations of WriterInfo in RemoteSerializer::ProcessLogCreateWriter() would leave the network_time member uninitialized which could later cause localtime_r() calls in Ascii::Timestamp() to return a null pointer due to the bizarre input and giving that to strftime() causes it to segfault. --- src/logging/WriterBackend.cc | 2 ++ src/logging/WriterBackend.h | 4 ++-- src/logging/writers/Ascii.cc | 9 +-------- 3 files changed, 5 insertions(+), 10 deletions(-) diff --git a/src/logging/WriterBackend.cc b/src/logging/WriterBackend.cc index 8f119d6f8f..87db8e4437 100644 --- a/src/logging/WriterBackend.cc +++ b/src/logging/WriterBackend.cc @@ -76,6 +76,7 @@ bool WriterBackend::WriterInfo::Read(SerializationFormat* fmt) if ( ! (fmt->Read(&tmp_path, "path") && fmt->Read(&rotation_base, "rotation_base") && fmt->Read(&rotation_interval, "rotation_interval") && + fmt->Read(&network_time, "network_time") && fmt->Read(&size, "config_size")) ) return false; @@ -105,6 +106,7 @@ bool WriterBackend::WriterInfo::Write(SerializationFormat* fmt) const if ( ! (fmt->Write(path, "path") && fmt->Write(rotation_base, "rotation_base") && fmt->Write(rotation_interval, "rotation_interval") && + fmt->Write(network_time, "network_time") && fmt->Write(size, "config_size")) ) return false; diff --git a/src/logging/WriterBackend.h b/src/logging/WriterBackend.h index a59cd1893e..1ca5650057 100644 --- a/src/logging/WriterBackend.h +++ b/src/logging/WriterBackend.h @@ -81,9 +81,9 @@ public: */ config_map config; - WriterInfo() + WriterInfo() : path(0), rotation_interval(0.0), rotation_base(0.0), + network_time(0.0) { - path = 0; } WriterInfo(const WriterInfo& other) diff --git a/src/logging/writers/Ascii.cc b/src/logging/writers/Ascii.cc index 87fa5dfb3c..c77e680a92 100644 --- a/src/logging/writers/Ascii.cc +++ b/src/logging/writers/Ascii.cc @@ -416,23 +416,16 @@ string Ascii::LogExt() string Ascii::Timestamp(double t) { -#if 1 - return "2012-01-01-00-00-00"; -#else - // Using the version below leads to occasional crashes at least on Mac OS. - // Not sure why, all the function should be thread-safe ... - time_t teatime = time_t(t); struct tm tmbuf; struct tm* tm = localtime_r(&teatime, &tmbuf); - char tmp[128]; + char tmp[128]; const char* const date_fmt = "%Y-%m-%d-%H-%M-%S"; strftime(tmp, sizeof(tmp), date_fmt, tm); return tmp; -#endif }