Skip to content

Commit 81d5533

Browse files
committedNov 12, 2018
Fix get_server_status() segfault due to uninitialized m_env
Fixes #7857
1 parent b786982 commit 81d5533

File tree

1 file changed

+29
-23
lines changed

1 file changed

+29
-23
lines changed
 

‎src/server.cpp

+29-23
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,7 @@ Server::~Server()
260260
m_env->kickAllPlayers(SERVER_ACCESSDENIED_SHUTDOWN,
261261
kick_msg, reconnect);
262262
}
263-
263+
264264
actionstream << "Server: Shutting down" << std::endl;
265265

266266
// Do this before stopping the server in case mapgen callbacks need to access
@@ -2897,38 +2897,44 @@ PlayerSAO *Server::getPlayerSAO(session_t peer_id)
28972897
std::wstring Server::getStatusString()
28982898
{
28992899
std::wostringstream os(std::ios_base::binary);
2900-
os<<L"# Server: ";
2900+
os << L"# Server: ";
29012901
// Version
2902-
os<<L"version="<<narrow_to_wide(g_version_string);
2902+
os << L"version=" << narrow_to_wide(g_version_string);
29032903
// Uptime
2904-
os<<L", uptime="<<m_uptime.get();
2904+
os << L", uptime=" << m_uptime.get();
29052905
// Max lag estimate
2906-
os<<L", max_lag="<<m_env->getMaxLagEstimate();
2906+
os << L", max_lag=" << (m_env ? m_env->getMaxLagEstimate() : 0);
2907+
29072908
// Information about clients
29082909
bool first = true;
2909-
os<<L", clients={";
2910-
std::vector<session_t> clients = m_clients.getClientIDs();
2911-
for (session_t client_id : clients) {
2912-
// Get player
2913-
RemotePlayer *player = m_env->getPlayer(client_id);
2914-
// Get name of player
2915-
std::wstring name = L"unknown";
2916-
if (player)
2917-
name = narrow_to_wide(player->getName());
2918-
// Add name to information string
2919-
if(!first)
2920-
os << L", ";
2921-
else
2922-
first = false;
2923-
os << name;
2910+
os << L", clients={";
2911+
if (m_env) {
2912+
std::vector<session_t> clients = m_clients.getClientIDs();
2913+
for (session_t client_id : clients) {
2914+
RemotePlayer *player = m_env->getPlayer(client_id);
2915+
2916+
// Get name of player
2917+
std::wstring name = L"unknown";
2918+
if (player)
2919+
name = narrow_to_wide(player->getName());
2920+
2921+
// Add name to information string
2922+
if (!first)
2923+
os << L", ";
2924+
else
2925+
first = false;
2926+
2927+
os << name;
2928+
}
29242929
}
29252930
os << L"}";
29262931

2927-
if (!((ServerMap*)(&m_env->getMap()))->isSavingEnabled())
2928-
os<<std::endl<<L"# Server: "<<" WARNING: Map saving is disabled.";
2932+
if (m_env && !((ServerMap*)(&m_env->getMap()))->isSavingEnabled())
2933+
os << std::endl << L"# Server: " << " WARNING: Map saving is disabled.";
29292934

29302935
if (!g_settings->get("motd").empty())
2931-
os<<std::endl<<L"# Server: "<<narrow_to_wide(g_settings->get("motd"));
2936+
os << std::endl << L"# Server: " << narrow_to_wide(g_settings->get("motd"));
2937+
29322938
return os.str();
29332939
}
29342940

0 commit comments

Comments
 (0)
Please sign in to comment.