From d0871ad26293213bb5a1ac17f25158688149de77 Mon Sep 17 00:00:00 2001 From: 3lswear Date: Sat, 26 Feb 2022 17:19:34 +0300 Subject: [PATCH] fix: call free on unitialized client (fix double free) --- src/Server/Server.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/Server/Server.cpp b/src/Server/Server.cpp index c64ba44..23913ac 100644 --- a/src/Server/Server.cpp +++ b/src/Server/Server.cpp @@ -153,14 +153,12 @@ inline int Server::delete_fd(std::map &map, { int ret; ret = epoll_ctl(_epoll_fd, EPOLL_CTL_DEL, it->first, NULL); - // delete map[fd]; - delete it->second; DBOUT << WARNING << getDebugTime() << OKCYAN << " deleting fd " << it->first << ENDL; + delete it->second; close(it->first); - delete client_map[it->first]; client_map.erase(it->first); map.erase(it++); @@ -339,7 +337,10 @@ void Server::run(void) while (fd_it != vacant_fds.end()) { if (TimeToDie(fd_it->second->last_modif, LIFE_TIME)) + { + free(client_map[fd_it->first]); delete_fd(vacant_fds, fd_it, client_map); + } else ++fd_it; }