From 2b97fead9e15e19c2f66381cf27fb0329c2012c6 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Thu, 15 Feb 2024 15:29:44 +0100 Subject: [PATCH] Fix some potential iterator invalidation issues --- src/client/event_manager.h | 7 +++---- src/network/serverpackethandler.cpp | 5 ++--- src/server.cpp | 5 ++--- src/server.h | 1 - src/server/ban.cpp | 4 ++-- src/serverenvironment.cpp | 7 +++---- 6 files changed, 12 insertions(+), 17 deletions(-) diff --git a/src/client/event_manager.h b/src/client/event_manager.h index 16f7bcf07..99895049c 100644 --- a/src/client/event_manager.h +++ b/src/client/event_manager.h @@ -70,14 +70,13 @@ public: } void dereg(MtEvent::Type type, event_receive_func f, void *data) override { - std::map::iterator i = m_dest.find(type); + auto i = m_dest.find(type); if (i != m_dest.end()) { std::list &funcs = i->second.funcs; - auto j = funcs.begin(); - while (j != funcs.end()) { + for (auto j = funcs.begin(); j != funcs.end(); ) { bool remove = (j->f == f && (!data || j->d == data)); if (remove) - funcs.erase(j++); + j = funcs.erase(j); else ++j; } diff --git a/src/network/serverpackethandler.cpp b/src/network/serverpackethandler.cpp index 146f4cfb3..c3888c110 100644 --- a/src/network/serverpackethandler.cpp +++ b/src/network/serverpackethandler.cpp @@ -1336,15 +1336,14 @@ void Server::handleCommand_RemovedSounds(NetworkPacket* pkt) *pkt >> id; - std::unordered_map::iterator i = - m_playing_sounds.find(id); + auto i = m_playing_sounds.find(id); if (i == m_playing_sounds.end()) continue; ServerPlayingSound &psound = i->second; psound.clients.erase(pkt->getPeerId()); if (psound.clients.empty()) - m_playing_sounds.erase(i++); + m_playing_sounds.erase(i); } } diff --git a/src/server.cpp b/src/server.cpp index 745895685..7a776a246 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -2924,12 +2924,11 @@ void Server::DeleteClient(session_t peer_id, ClientDeletionReason reason) /* Clear references to playing sounds */ - for (std::unordered_map::iterator - i = m_playing_sounds.begin(); i != m_playing_sounds.end();) { + for (auto i = m_playing_sounds.begin(); i != m_playing_sounds.end();) { ServerPlayingSound &psound = i->second; psound.clients.erase(peer_id); if (psound.clients.empty()) - m_playing_sounds.erase(i++); + i = m_playing_sounds.erase(i); else ++i; } diff --git a/src/server.h b/src/server.h index 5ee85d0e6..9448ea6d4 100644 --- a/src/server.h +++ b/src/server.h @@ -54,7 +54,6 @@ class IWritableItemDefManager; class NodeDefManager; class IWritableCraftDefManager; class BanManager; -class EventManager; class Inventory; class ModChannelMgr; class RemotePlayer; diff --git a/src/server/ban.cpp b/src/server/ban.cpp index 3decc9666..47a6ccd5e 100644 --- a/src/server/ban.cpp +++ b/src/server/ban.cpp @@ -123,9 +123,9 @@ void BanManager::add(const std::string &ip, const std::string &name) void BanManager::remove(const std::string &ip_or_name) { MutexAutoLock lock(m_mutex); - for (StringMap::iterator it = m_ips.begin(); it != m_ips.end();) { + for (auto it = m_ips.begin(); it != m_ips.end();) { if ((it->first == ip_or_name) || (it->second == ip_or_name)) { - m_ips.erase(it++); + it = m_ips.erase(it); m_modified = true; } else { ++it; diff --git a/src/serverenvironment.cpp b/src/serverenvironment.cpp index 753899fb8..275433546 100644 --- a/src/serverenvironment.cpp +++ b/src/serverenvironment.cpp @@ -1616,9 +1616,8 @@ void ServerEnvironment::step(float dtime) Manage particle spawner expiration */ if (m_particle_management_interval.step(dtime, 1.0)) { - for (std::unordered_map::iterator i = m_particle_spawners.begin(); - i != m_particle_spawners.end(); ) { - //non expiring spawners + for (auto i = m_particle_spawners.begin(); i != m_particle_spawners.end(); ) { + // non expiring spawners if (i->second == PARTICLE_SPAWNER_NO_EXPIRY) { ++i; continue; @@ -1626,7 +1625,7 @@ void ServerEnvironment::step(float dtime) i->second -= 1.0f; if (i->second <= 0.f) - m_particle_spawners.erase(i++); + i = m_particle_spawners.erase(i); else ++i; }