From 1761907f575353e8f4b5696050d4ac6597f35a25 Mon Sep 17 00:00:00 2001 From: Ted John Date: Thu, 9 Jun 2016 18:37:12 +0100 Subject: [PATCH] handle bad map data and close connection --- src/network/network.cpp | 4 ++++ src/util/util.c | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/src/network/network.cpp b/src/network/network.cpp index fabc3bdb9f..2c7692d9d6 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -1202,6 +1202,9 @@ bool Network::ProcessConnection(NetworkConnection& connection) case NETWORK_READPACKET_SUCCESS: // done reading in packet ProcessPacket(connection, connection.InboundPacket); + if (connection.Socket == nullptr) { + return false; + } break; case NETWORK_READPACKET_MORE_DATA: // more data required to be read @@ -1600,6 +1603,7 @@ void Network::Client_Handle_MAP(NetworkConnection& connection, NetworkPacket& pa if (data == NULL) { log_warning("Failed to decompress data sent from server."); + Close(); return; } } else { diff --git a/src/util/util.c b/src/util/util.c index 0536be40b3..f32fc34e13 100644 --- a/src/util/util.c +++ b/src/util/util.c @@ -409,6 +409,10 @@ unsigned char *util_zlib_inflate(unsigned char *data, size_t data_in_size, size_ log_error("Your build is shipped with broken zlib. Please use the official build."); free(buffer); return NULL; + } else if (ret < 0) { + log_error("Error uncompressing data."); + free(buffer); + return NULL; } ret = uncompress(buffer, &out_size, data, data_in_size); } while (ret != Z_OK);