From 81320af92eb204a1b97eb7a98a3a41fdaada314d Mon Sep 17 00:00:00 2001 From: 3lswear Date: Sun, 6 Feb 2022 19:01:52 +0300 Subject: [PATCH] fix: leak mitigations --- src/Server/Server.cpp | 42 +++++++++++++++++++++++++++++---------- src/config/TOMLParser.cpp | 9 +++++---- 2 files changed, 37 insertions(+), 14 deletions(-) diff --git a/src/Server/Server.cpp b/src/Server/Server.cpp index f403bc2..dbdeabd 100644 --- a/src/Server/Server.cpp +++ b/src/Server/Server.cpp @@ -281,7 +281,6 @@ void Server::clean_generic(toml_node *node) { DBOUT << "cleaning string" << ENDL; delete node->getString(); - delete node; } break; case toml_node::MAPARRAY: @@ -291,13 +290,21 @@ void Server::clean_generic(toml_node *node) for (TOMLMapArray::iterator it = map_array->begin(); it != map_array->end(); ++it) { + DBOUT << "cleaning a MAP of MAPARRAY" << ENDL; TOMLMap *map = *it; - for (TOMLMap::iterator map_it = map->begin(); + TOMLMap::iterator map_it = map->begin(); + for (map_it = map->begin(); map_it != map->end(); ++map_it) { + DBOUT << "cleaning a MAP item " << map_it->first << ENDL; clean_generic(map_it->second); + /* map->erase(map_it); */ } + map->clear(); + delete map; } + map_array->clear(); + delete map_array; DBOUT << "end cleaning MAPARRAY" << ENDL; } break; @@ -309,20 +316,34 @@ void Server::clean_generic(toml_node *node) { DBOUT << "key is " << it->first << ENDL; clean_generic(it->second); - map->erase(it); + /* map->erase(it); */ } map->clear(); - delete node; + delete map; + } + break; + + case toml_node::ARRAY: + { + DBOUT << "cleaning ARRAY" << ENDL; + TOMLArray *arr = node->getArray(); + for (TOMLArray::iterator it = arr->begin(); + it != arr->end(); ++it) + { + clean_generic(*it); + } + arr->clear(); + delete arr; DBOUT << "end cleaning MAP" << ENDL; } break; default: { - DBOUT << "Cleaning " << node->type << " not implemented :)" << ENDL; - delete node; + DBOUT << "Cleaning type " << node->type << " not implemented :)" << ENDL; } } + delete node; } @@ -333,16 +354,17 @@ void Server::clean_parsed(TOMLMap *root) DBOUT << ">>> cleaning up: <<<" << std::endl; for (it = root->begin(); it != root->end(); ++it) { - DBOUT << RED << it->first - << ": " << GREEN - << *(it->second->toString()); + /* DBOUT << RED << it->first */ + /* << ": " << GREEN */ + /* << *(it->second->toString()); */ clean_generic(it->second); /* delete it->second; */ std::cout << ", " << std::endl; } DBOUT << YELLO << "end of clean" << ENDL; - /* delete root; */ + root->clear(); + delete root; root = NULL; } diff --git a/src/config/TOMLParser.cpp b/src/config/TOMLParser.cpp index 6830962..bb2316c 100644 --- a/src/config/TOMLParser.cpp +++ b/src/config/TOMLParser.cpp @@ -444,6 +444,7 @@ namespace config } else (it->second)->getMapArray()->push_back(map_node->getMap()); + delete map_node; } else if (type == toml_node::MAP) { @@ -460,13 +461,13 @@ namespace config { it = local_root->find(*subname); - toml_node *map_node2; - map_node2 = new toml_node; - TOMLMap *map = new TOMLMap; - map_node2->setObject(map); /* subname not found in local_root */ if (it == local_root->end()) { + toml_node *map_node2; + map_node2 = new toml_node; + TOMLMap *map = new TOMLMap; + map_node2->setObject(map); (*local_root)[*subname] = map_node2; local_root = map; }