diff options
author | megamage <none@none> | 2009-08-19 16:26:22 -0500 |
---|---|---|
committer | megamage <none@none> | 2009-08-19 16:26:22 -0500 |
commit | e954904e6d0f026254d4ab93c6b4d051cc7253c6 (patch) | |
tree | 24374c0508ddd062dccb7b30bb7455eb9a191b3c /src/game/ChatHandler.cpp | |
parent | d9ed49749db71f971c650c109d5bc1ce8af5d8ad (diff) |
[8378] Use exceptions instead of explicit size checking for each packet Author: arrai
CHECK_PACKET_SIZE was pretty error prone; once it was forgotten mangosd
could crash due to the asserts in ByteBuffer.h. That was exploitable by
malicious players.
Furthermore, there were duplicate checks: Additionally to
CHECK_PACKET_SIZE, the ByteBuffer assertions keept an eye
on not exceeding the packet boundaries - just to crash the server for
sure in such a case.
To prevent memory leaks or other undesirable states, please read in
every handler all variables _before_ doing any concrete handling.
--HG--
branch : trunk
Diffstat (limited to 'src/game/ChatHandler.cpp')
-rw-r--r-- | src/game/ChatHandler.cpp | 11 |
1 files changed, 0 insertions, 11 deletions
diff --git a/src/game/ChatHandler.cpp b/src/game/ChatHandler.cpp index 6fdf9f0b222..106e445c245 100644 --- a/src/game/ChatHandler.cpp +++ b/src/game/ChatHandler.cpp @@ -42,8 +42,6 @@ void WorldSession::HandleMessagechatOpcode( WorldPacket & recv_data ) { - CHECK_PACKET_SIZE(recv_data,4+4+1); - uint32 type; uint32 lang; @@ -198,7 +196,6 @@ void WorldSession::HandleMessagechatOpcode( WorldPacket & recv_data ) { std::string to, msg; recv_data >> to; - CHECK_PACKET_SIZE(recv_data,4+4+(to.size()+1)+1); recv_data >> msg; // strip invisible characters for non-addon messages @@ -496,9 +493,6 @@ void WorldSession::HandleMessagechatOpcode( WorldPacket & recv_data ) std::string channel = "", msg = ""; recv_data >> channel; - // recheck - CHECK_PACKET_SIZE(recv_data,4+4+(channel.size()+1)+1); - recv_data >> msg; // strip invisible characters for non-addon messages @@ -577,7 +571,6 @@ void WorldSession::HandleEmoteOpcode( WorldPacket & recv_data ) { if(!GetPlayer()->isAlive()) return; - CHECK_PACKET_SIZE(recv_data,4); uint32 emote; recv_data >> emote; @@ -628,8 +621,6 @@ void WorldSession::HandleTextEmoteOpcode( WorldPacket & recv_data ) return; } - CHECK_PACKET_SIZE(recv_data,4+4+8); - uint32 text_emote, emoteNum; uint64 guid; @@ -679,8 +670,6 @@ void WorldSession::HandleTextEmoteOpcode( WorldPacket & recv_data ) void WorldSession::HandleChatIgnoredOpcode(WorldPacket& recv_data ) { - CHECK_PACKET_SIZE(recv_data, 8+1); - uint64 iguid; uint8 unk; //sLog.outDebug("WORLD: Received CMSG_CHAT_IGNORED"); |