From 78d1c731e3181ee77af3dbabcec40b10e473702c Mon Sep 17 00:00:00 2001 From: mckaygerhard Date: Thu, 5 Jan 2023 16:41:15 -0400 Subject: [PATCH] Fix get_server_status() segfault due to uninitialized m_env * Fixes [#7857](https://github.com/minetest/minetest/issues/7857) minetest.get_server_status() causes a Segmentation fault tacken from https://github.com/minetest/minetest/commit/81d55338fa26cf26d43e1e632b9a089a787230dd * backported commit 13ad926546def65f01b5941ebb21493278189bea --- src/server.cpp | 51 ++++++++++++++++++++++++++------------------------ 1 file changed, 27 insertions(+), 24 deletions(-) diff --git a/src/server.cpp b/src/server.cpp index e1befcffc..0aaec809a 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -3013,36 +3013,39 @@ PlayerSAO* Server::getPlayerSAO(u16 peer_id) std::wstring Server::getStatusString() { std::wostringstream os(std::ios_base::binary); - os< clients = m_clients.getClientIDs(); - for (std::vector::iterator i = clients.begin(); i != clients.end(); ++i) { - // Get player - RemotePlayer *player = m_env->getPlayer(*i); - // Get name of player - std::wstring name = L"unknown"; - if (player != NULL) - 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() == false) - os<get("motd") != "") - os<get("motd")); + if (m_env && !((ServerMap*)(&m_env->getMap()))->isSavingEnabled()) + os << std::endl << L"# Server: " << " WARNING: Map saving is disabled."; + if (!g_settings->get("motd").empty()) + os << std::endl << L"# Server: " << narrow_to_wide(g_settings->get("motd")); return os.str(); }