From 81d55338fa26cf26d43e1e632b9a089a787230dd Mon Sep 17 00:00:00 2001 From: rubenwardy Date: Mon, 12 Nov 2018 14:34:01 +0000 Subject: [PATCH] Fix get_server_status() segfault due to uninitialized m_env Fixes #7857 --- src/server.cpp | 52 ++++++++++++++++++++++++++++---------------------- 1 file changed, 29 insertions(+), 23 deletions(-) diff --git a/src/server.cpp b/src/server.cpp index 678ee387..895e2bb8 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -260,7 +260,7 @@ Server::~Server() m_env->kickAllPlayers(SERVER_ACCESSDENIED_SHUTDOWN, kick_msg, reconnect); } - + actionstream << "Server: Shutting down" << std::endl; // Do this before stopping the server in case mapgen callbacks need to access @@ -2897,38 +2897,44 @@ PlayerSAO *Server::getPlayerSAO(session_t peer_id) std::wstring Server::getStatusString() { std::wostringstream os(std::ios_base::binary); - os< clients = m_clients.getClientIDs(); - for (session_t client_id : clients) { - // Get player - RemotePlayer *player = m_env->getPlayer(client_id); - // Get name of player - std::wstring name = L"unknown"; - if (player) - name = narrow_to_wide(player->getName()); - // Add name to information string - if(!first) - os << L", "; - else - first = false; - os << name; + os << L", clients={"; + if (m_env) { + std::vector clients = m_clients.getClientIDs(); + for (session_t client_id : clients) { + RemotePlayer *player = m_env->getPlayer(client_id); + + // Get name of player + std::wstring name = L"unknown"; + if (player) + name = narrow_to_wide(player->getName()); + + // Add name to information string + if (!first) + os << L", "; + else + first = false; + + os << name; + } } os << L"}"; - if (!((ServerMap*)(&m_env->getMap()))->isSavingEnabled()) - os<getMap()))->isSavingEnabled()) + os << std::endl << L"# Server: " << " WARNING: Map saving is disabled."; if (!g_settings->get("motd").empty()) - os<get("motd")); + os << std::endl << L"# Server: " << narrow_to_wide(g_settings->get("motd")); + return os.str(); }