From 6bb4d43c3775ab5ace436184eca7bbb24db12df5 Mon Sep 17 00:00:00 2001 From: loonycyborg Date: Fri, 4 May 2018 19:03:33 +0300 Subject: [PATCH] wesnothd: process wml commands one at a time in handle_read_from_player as is done in rest of wesnothd. This also fixes crash from self-kick due to it trying to continue processing looking for further tags after /query kick kicked the user in quesion. (cherry-picked from commit 6a310f0c79d002cbe53d9ee4f12b95a3b31c721b) --- src/server/server.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/server/server.cpp b/src/server/server.cpp index fce3f3da6ac..21860f3acea 100644 --- a/src/server/server.cpp +++ b/src/server/server.cpp @@ -855,16 +855,20 @@ void server::handle_read_from_player(socket_ptr socket, std::shared_ptroutput() << std::endl; if(doc->child("refresh_lobby")) { send_to_player(socket, games_and_users_list_); + return; } if(simple_wml::node* whisper = doc->child("whisper")) { handle_whisper(socket, *whisper); + return; } if(simple_wml::node* query = doc->child("query")) { handle_query(socket, *query); + return; } if(simple_wml::node* nickserv = doc->child("nickserv")) { handle_nickserv(socket, *nickserv); + return; } if(!player_is_in_game(socket)) @@ -877,14 +881,17 @@ void server::handle_read_from_player(socket_ptr socket, std::shared_ptr doc) { if(simple_wml::node* message = doc->child("message")) { handle_message(socket, *message); + return; } if(simple_wml::node* create_game = doc->child("create_game")) { handle_create_game(socket, *create_game); + return; } if(simple_wml::node* join = doc->child("join")) { handle_join_game(socket, *join); + return; } }