From 4fc5672a6091e11d19e98c0d99e116a485acbf06 Mon Sep 17 00:00:00 2001 From: Aokromes Date: Thu, 7 Jul 2016 20:25:29 +0200 Subject: [PATCH] Core/PacketIO: Fixed crash happening when someone sends too small packet that is processed directly in WorldSocket --- src/server/game/Server/WorldSocket.cpp | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/src/server/game/Server/WorldSocket.cpp b/src/server/game/Server/WorldSocket.cpp index 8e704559478..1a51a84b728 100644 --- a/src/server/game/Server/WorldSocket.cpp +++ b/src/server/game/Server/WorldSocket.cpp @@ -351,9 +351,20 @@ WorldSocket::ReadDataHandlerResult WorldSocket::ReadDataHandler() switch (opcode) { case CMSG_PING: + { LogOpcodeText(opcode, sessionGuard); - return HandlePing(packet) ? ReadDataHandlerResult::Ok : ReadDataHandlerResult::Error; + try + { + return HandlePing(packet) ? ReadDataHandlerResult::Ok : ReadDataHandlerResult::Error; + } + catch (ByteBufferPositionException const&) + { + } + TC_LOG_ERROR("network", "WorldSocket::ReadDataHandler(): client %s sent malformed CMSG_PING", GetRemoteIpAddress().to_string().c_str()); + return ReadDataHandlerResult::Error; + } case CMSG_AUTH_SESSION: + { LogOpcodeText(opcode, sessionGuard); if (_worldSession) { @@ -363,8 +374,17 @@ WorldSocket::ReadDataHandlerResult WorldSocket::ReadDataHandler() return ReadDataHandlerResult::Error; } - HandleAuthSession(packet); - return ReadDataHandlerResult::WaitingForQuery; + try + { + HandleAuthSession(packet); + return ReadDataHandlerResult::WaitingForQuery; + } + catch (ByteBufferPositionException const&) + { + } + TC_LOG_ERROR("network", "WorldSocket::ReadDataHandler(): client %s sent malformed CMSG_AUTH_SESSION", GetRemoteIpAddress().to_string().c_str()); + return ReadDataHandlerResult::Error; + } case CMSG_KEEP_ALIVE: LogOpcodeText(opcode, sessionGuard); sScriptMgr->OnPacketReceive(_worldSession, packet);