From e47a0966bdfb4560290b5239ef7c118d8bfa78eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20K=C3=B6fferlein?= Date: Sat, 1 Sep 2018 21:26:29 +0200 Subject: [PATCH] Bugfix: net tracer memory corruption issue - missing copy ctor/assignment --- .../tools/net_tracer/db_plugin/dbNetTracer.cc | 33 +++++++++++++++++++ .../tools/net_tracer/db_plugin/dbNetTracer.h | 10 ++++++ 2 files changed, 43 insertions(+) diff --git a/src/plugins/tools/net_tracer/db_plugin/dbNetTracer.cc b/src/plugins/tools/net_tracer/db_plugin/dbNetTracer.cc index 60ae0e7b2..416430ace 100644 --- a/src/plugins/tools/net_tracer/db_plugin/dbNetTracer.cc +++ b/src/plugins/tools/net_tracer/db_plugin/dbNetTracer.cc @@ -148,6 +148,39 @@ NetTracerData::NetTracerData () // .. nothing yet .. } +NetTracerData::NetTracerData (const NetTracerData &other) + : m_next_log_layer (0) +{ + operator= (other); +} + +NetTracerData & +NetTracerData::operator= (const NetTracerData &other) +{ + if (this != &other) { + + for (std::map ::const_iterator l = m_log_layers.begin (); l != m_log_layers.end (); ++l) { + delete l->second; + } + m_log_layers.clear (); + + for (std::map ::const_iterator l = other.m_log_layers.begin (); l != other.m_log_layers.end (); ++l) { + m_log_layers.insert (std::make_pair (l->first, new NetTracerLayerExpression (*l->second))); + } + + m_next_log_layer = other.m_next_log_layer; + m_connections = other.m_connections; + m_original_layers = other.m_original_layers; + m_connection_graph = other.m_connection_graph; + m_log_connection_graph = other.m_log_connection_graph; + m_requires_booleans = other.m_requires_booleans; + m_symbols = other.m_symbols; + + } + + return *this; +} + NetTracerData::~NetTracerData () { for (std::map ::const_iterator l = m_log_layers.begin (); l != m_log_layers.end (); ++l) { diff --git a/src/plugins/tools/net_tracer/db_plugin/dbNetTracer.h b/src/plugins/tools/net_tracer/db_plugin/dbNetTracer.h index eee79d42f..682e553d3 100644 --- a/src/plugins/tools/net_tracer/db_plugin/dbNetTracer.h +++ b/src/plugins/tools/net_tracer/db_plugin/dbNetTracer.h @@ -487,6 +487,16 @@ public: */ ~NetTracerData (); + /** + * @brief Copy constructor + */ + NetTracerData (const NetTracerData &other); + + /** + * @brief Assignment + */ + NetTracerData &operator= (const NetTracerData &other); + /** * @brief Register a logical layer *