diff options
author | Sovak <sovak007@gmail.com> | 2014-10-12 12:38:04 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2014-10-12 12:38:04 +0200 |
commit | d0db99961f78a950d24cd23250a9438be29ed4ab (patch) | |
tree | d01e15aacb4ab9b91a57a55f8dc6e5c155e8150a | |
parent | 241fdc49a7c49bdf627aeb0d14b0e6540090a81a (diff) |
Core/PacketIO: Restored client opcode handler check lost in ace->boost transition
-rw-r--r-- | src/server/game/Server/WorldSocket.cpp | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/server/game/Server/WorldSocket.cpp b/src/server/game/Server/WorldSocket.cpp index abcf446dd8d..15f311b5d10 100644 --- a/src/server/game/Server/WorldSocket.cpp +++ b/src/server/game/Server/WorldSocket.cpp @@ -213,6 +213,17 @@ bool WorldSocket::ReadDataHandler() return false; } + // prevent invalid memory access/crash with custom opcodes + if (opcode >= NUM_OPCODE_HANDLERS) + return false; + + OpcodeHandler const* handler = opcodeTable[opcode]; + if (!handler || handler->Status == STATUS_UNHANDLED) + { + TC_LOG_ERROR("network.opcode", "No defined handler for opcode %s sent by %s", GetOpcodeNameForLogging(packet.GetOpcode()).c_str(), _worldSession->GetPlayerInfo().c_str()); + return false; + } + // Our Idle timer will reset on any non PING opcodes. // Catches people idling on the login screen and any lingering ingame connections. _worldSession->ResetTimeOutTime(); |