From cac07b3e79cdae722489e33bb4787c66f851b26b Mon Sep 17 00:00:00 2001 From: loonycyborg Date: Wed, 4 May 2016 20:34:16 +0300 Subject: [PATCH] Fix invalid iterator usage --- src/server/server.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/server/server.cpp b/src/server/server.cpp index 1ed6e7b7f648..ac1b50287f40 100644 --- a/src/server/server.cpp +++ b/src/server/server.cpp @@ -2682,18 +2682,22 @@ void server::kick_handler(const std::string& /*issuer_name*/, const std::string& bool kicked = false; // if we find a '.' consider it an ip mask const bool match_ip = (std::count(kick_mask.begin(), kick_mask.end(), '.') >= 1); + std::vector users_to_kick; for (PlayerConnections::iterator it = player_connections_.begin(); it != player_connections_.end(); ++it) { if ((match_ip && utils::wildcard_string_match(client_address(it->socket()), kick_mask)) || (!match_ip && utils::wildcard_string_match(it->info().name(), kick_mask))) { + users_to_kick.push_back(it->socket()); + } + } + for(const auto& socket : users_to_kick) { if (kicked) *out << "\n"; else kicked = true; - *out << "Kicked " << it->info().name() << " (" - << client_address(it->socket()) << "). '" + *out << "Kicked " << player_connections_.find(socket)->name() << " (" + << client_address(socket) << "). '" << kick_message << "'"; - async_send_error(it->socket(), kick_message); - remove_player(it->socket()); - } + async_send_error(socket, kick_message); + remove_player(socket); } if (!kicked) *out << "No user matched '" << kick_mask << "'."; }