diff options
author | megamage <none@none> | 2009-08-19 17:07:21 -0500 |
---|---|---|
committer | megamage <none@none> | 2009-08-19 17:07:21 -0500 |
commit | c9117721255b24d86f00b3f94c6f112fefa5bfdd (patch) | |
tree | 8daf9665b3142c4974c90e38414ae7669db694cc /src/game/MiscHandler.cpp | |
parent | f5085b2f39c91ed0103c79d95f8d18a4ef2a6371 (diff) |
[8389] Implement check really read received packet size and warning it not all data read. Author: VladimirMangos
* This let more easy catch packet structure chnages at client switch.
* Fixed structure CMSG_GUILD_BANK_SWAP_ITEMS
* Fixed structure CMSG_SPLIT_ITEM, CMSG_SELL_ITEM
* Added read data amount fixes for some other packets.
Thanks to TOM_RUS in help check correct packets structure.
Note: not all packets possible fixed. Please report for not fixed cases at errors:
"opcode %s (0x%.4X) have unprocessed tail data (read stop at %u from %u)"
--HG--
branch : trunk
Diffstat (limited to 'src/game/MiscHandler.cpp')
-rw-r--r-- | src/game/MiscHandler.cpp | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/src/game/MiscHandler.cpp b/src/game/MiscHandler.cpp index f0f0a4b42a4..fc7dd114af2 100644 --- a/src/game/MiscHandler.cpp +++ b/src/game/MiscHandler.cpp @@ -931,6 +931,7 @@ void WorldSession::HandleUpdateAccountData(WorldPacket &recv_data) if(decompressedSize > 0xFFFF) { + recv_data.rpos(recv_data.wpos()); // unnneded warning spam in this case sLog.outError("UAD: Account data packet too big, size %u", decompressedSize); return; } @@ -941,10 +942,13 @@ void WorldSession::HandleUpdateAccountData(WorldPacket &recv_data) uLongf realSize = decompressedSize; if(uncompress(const_cast<uint8*>(dest.contents()), &realSize, const_cast<uint8*>(recv_data.contents() + recv_data.rpos()), recv_data.size() - recv_data.rpos()) != Z_OK) { + recv_data.rpos(recv_data.wpos()); // unnneded warning spam in this case sLog.outError("UAD: Failed to decompress account data"); return; } + recv_data.rpos(recv_data.wpos()); // uncompress read (recv_data.size() - recv_data.rpos()) + std::string adata; dest >> adata; @@ -1050,7 +1054,8 @@ void WorldSession::HandleMoveTimeSkippedOpcode( WorldPacket & recv_data ) /* WorldSession::Update( getMSTime() );*/ DEBUG_LOG( "WORLD: Time Lag/Synchronization Resent/Update" ); - recv_data.read_skip2<uint64,uint32>(); + recv_data.read_skip<uint64>(); + recv_data.read_skip<uint32>(); /* uint64 guid; uint32 time_skipped; |