From ed7ce38fe0698db7f1aa424dc66c18d1e95e0d72 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sun, 3 Nov 2019 14:34:07 -0600 Subject: [PATCH] Add some pointer safety checks to underlying data service call [skip ci] --- common/net/tcp_connection.cpp | 12 ++++++++++++ common/net/tcp_connection.h | 2 ++ world/eqemu_api_world_data_service.cpp | 4 ++++ world/zoneserver.h | 1 + 4 files changed, 19 insertions(+) diff --git a/common/net/tcp_connection.cpp b/common/net/tcp_connection.cpp index 83d6c89b5..695ac7643 100644 --- a/common/net/tcp_connection.cpp +++ b/common/net/tcp_connection.cpp @@ -224,6 +224,10 @@ std::string EQ::Net::TCPConnection::RemoteIP() const int EQ::Net::TCPConnection::RemotePort() const { + if (!m_socket) { + return 0; + } + sockaddr_storage addr; int addr_len = sizeof(addr); uv_tcp_getpeername(m_socket, (sockaddr*)&addr, &addr_len); @@ -240,3 +244,11 @@ int EQ::Net::TCPConnection::RemotePort() const return 0; } + +/** + * @return + */ +bool EQ::Net::TCPConnection::IsConnected() const +{ + return m_socket != nullptr; +} diff --git a/common/net/tcp_connection.h b/common/net/tcp_connection.h index c69671da8..6bc256e85 100644 --- a/common/net/tcp_connection.h +++ b/common/net/tcp_connection.h @@ -24,10 +24,12 @@ namespace EQ void Read(const char *data, size_t count); void Write(const char *data, size_t count); + bool IsConnected() const; std::string LocalIP() const; int LocalPort() const; std::string RemoteIP() const; int RemotePort() const; + private: TCPConnection(); diff --git a/world/eqemu_api_world_data_service.cpp b/world/eqemu_api_world_data_service.cpp index 8a5291824..99cbcebe1 100644 --- a/world/eqemu_api_world_data_service.cpp +++ b/world/eqemu_api_world_data_service.cpp @@ -32,6 +32,10 @@ void callGetZoneList(Json::Value &response) for (auto &zone : zoneserver_list.getZoneServerList()) { Json::Value row; + if (!zone->IsConnected()) { + continue; + } + row["booting_up"] = zone->IsBootingUp(); row["client_address"] = zone->GetCAddress(); row["client_local_address"] = zone->GetCLocalAddress(); diff --git a/world/zoneserver.h b/world/zoneserver.h index af4641935..8bb1a6da8 100644 --- a/world/zoneserver.h +++ b/world/zoneserver.h @@ -57,6 +57,7 @@ public: const char* GetCompileTime() const{ return compiled; } void SetCompile(char* in_compile){ strcpy(compiled,in_compile); } inline uint32 GetZoneID() const { return zone_server_zone_id; } + inline bool IsConnected() const { return tcpc->Handle() ? tcpc->Handle()->IsConnected() : false; } inline std::string GetIP() const { return tcpc->Handle() ? tcpc->Handle()->RemoteIP() : ""; } inline uint16 GetPort() const { return tcpc->Handle() ? tcpc->Handle()->RemotePort() : 0; } inline const char* GetCAddress() const { return client_address; }