From e346454374c46458779a748f130077e4dd33dda5 Mon Sep 17 00:00:00 2001 From: Felipe Zimmerle Date: Tue, 16 Feb 2016 18:56:26 -0300 Subject: [PATCH] Fix memory leaks on the collections/variables management --- headers/modsecurity/transaction/variables.h | 1 + src/collections.cc | 7 ++++++- src/transaction.cc | 4 ---- src/variables.cc | 5 +++++ 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/headers/modsecurity/transaction/variables.h b/headers/modsecurity/transaction/variables.h index f6cb256d..d2c3e995 100644 --- a/headers/modsecurity/transaction/variables.h +++ b/headers/modsecurity/transaction/variables.h @@ -40,6 +40,7 @@ class Variables : public std::unordered_multimap { public: Variables(); + ~Variables(); void store(std::string key, std::string value); bool storeOrUpdateFirst(const std::string &key, diff --git a/src/collections.cc b/src/collections.cc index 854dd1ee..af0e7bbc 100644 --- a/src/collections.cc +++ b/src/collections.cc @@ -37,7 +37,12 @@ Collections::Collections() { } -Collections::~Collections() { } +Collections::~Collections() { + for (auto &a : *this) { + this->erase(a.first); + delete a.second; + } +} void Collections::init(const std::string& name, const std::string& key) { diff --git a/src/transaction.cc b/src/transaction.cc index 4b0799f8..3834c4c4 100644 --- a/src/transaction.cc +++ b/src/transaction.cc @@ -148,10 +148,6 @@ Transaction::~Transaction() { m_requestBody.str(std::string()); m_requestBody.clear(); - for (auto &a : m_collections) { - delete a.second; - } - m_rules->decrementReferenceCount(); } diff --git a/src/variables.cc b/src/variables.cc index 345feef8..507a0721 100644 --- a/src/variables.cc +++ b/src/variables.cc @@ -34,6 +34,11 @@ Variables::Variables() { this->reserve(1000); } +Variables::~Variables() { + for (auto &a : *this) { + this->erase(a.first); + } +} void Variables::store(std::string key, std::string value) { this->emplace(key, value);