From e0be0caadd76e49e66cec79a9eaeca8e2b2d1321 Mon Sep 17 00:00:00 2001 From: Shauren Date: Mon, 13 Apr 2020 21:00:29 +0200 Subject: [PATCH] Core/Battle.net * Fixed infinite loop in ReadFourCC if value in packet was 0 * Corrected ClosingReason enum in ConnectionClosing --- .../Packets/AuthenticationPackets.cpp | 4 +-- .../Packets/AuthenticationPackets.h | 2 +- src/server/bnetserver/Packets/BitStream.h | 2 +- .../bnetserver/Packets/ConnectionPackets.h | 26 +++++++++---------- src/server/bnetserver/Server/Session.cpp | 2 +- 5 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/server/bnetserver/Packets/AuthenticationPackets.cpp b/src/server/bnetserver/Packets/AuthenticationPackets.cpp index df19eedc02a..d048181d4ae 100644 --- a/src/server/bnetserver/Packets/AuthenticationPackets.cpp +++ b/src/server/bnetserver/Packets/AuthenticationPackets.cpp @@ -72,7 +72,7 @@ void Battlenet::Authentication::ResumeRequest::Read() } Login = _stream.ReadString(9, 3); - Region = _stream.Read(8); + GameAccountRegion = _stream.Read(8); GameAccountName = _stream.ReadString(5, 1); } @@ -84,7 +84,7 @@ std::string Battlenet::Authentication::ResumeRequest::ToString() const stream << std::endl << "Battlenet::Component Program: " << component.Program << ", Platform: " << component.Platform << ", Build: " << component.Build; stream << std::endl << "Login: " << Login; - stream << std::endl << "Region: " << uint32(Region); + stream << std::endl << "Region: " << uint32(GameAccountRegion); stream << std::endl << "GameAccountName: " << GameAccountName; return stream.str(); diff --git a/src/server/bnetserver/Packets/AuthenticationPackets.h b/src/server/bnetserver/Packets/AuthenticationPackets.h index 6aa8c5ff3a0..5a8e477b0a4 100644 --- a/src/server/bnetserver/Packets/AuthenticationPackets.h +++ b/src/server/bnetserver/Packets/AuthenticationPackets.h @@ -75,7 +75,7 @@ namespace Battlenet std::string Locale; std::vector Components; std::string Login; - uint8 Region =0; + uint8 GameAccountRegion = 0; std::string GameAccountName; }; diff --git a/src/server/bnetserver/Packets/BitStream.h b/src/server/bnetserver/Packets/BitStream.h index 43e8d59eefb..db412048e67 100644 --- a/src/server/bnetserver/Packets/BitStream.h +++ b/src/server/bnetserver/Packets/BitStream.h @@ -111,7 +111,7 @@ namespace Battlenet uint32 fcc = Read(32); EndianConvertReverse(fcc); size_t len = 4; - while (!(fcc & 0xFF)) + while (!(fcc & 0xFF) && len) { fcc >>= 8; --len; diff --git a/src/server/bnetserver/Packets/ConnectionPackets.h b/src/server/bnetserver/Packets/ConnectionPackets.h index b02a266626c..104f59e0554 100644 --- a/src/server/bnetserver/Packets/ConnectionPackets.h +++ b/src/server/bnetserver/Packets/ConnectionPackets.h @@ -100,19 +100,19 @@ namespace Battlenet public: enum ClosingReason { - PACKET_TOO_LARGE, - PACKET_CORRUPT, - PACKET_INVALID, - PACKET_INCORRECT, - HEADER_CORRUPT, - HEADER_IGNORED, - HEADER_INCORRECT, - PACKET_REJECTED, - CHANNEL_UNHANDLED, - COMMAND_UNHANDLED, - COMMAND_BAD_PERMISSIONS, - DIRECT_CALL, - TIMEOUT, + PACKET_TOO_LARGE = 1, + PACKET_CORRUPT = 2, + PACKET_INVALID = 3, + PACKET_INCORRECT = 4, + HEADER_CORRUPT = 5, + HEADER_IGNORED = 6, + HEADER_INCORRECT = 7, + PACKET_REJECTED = 8, + CHANNEL_UNHANDLED = 9, + COMMAND_UNHANDLED = 10, + COMMAND_BAD_PERMISSIONS = 11, + DIRECT_CALL = 12, + TIMEOUT = 13 }; struct PacketInfo diff --git a/src/server/bnetserver/Server/Session.cpp b/src/server/bnetserver/Server/Session.cpp index cbb5fcbaefe..355d82bbb0d 100644 --- a/src/server/bnetserver/Server/Session.cpp +++ b/src/server/bnetserver/Server/Session.cpp @@ -966,7 +966,7 @@ bool Battlenet::Session::HandleRiskFingerprintModule(BitStream* dataStream, Serv { logonResponse->AccountId = _accountInfo->Id; logonResponse->GameAccountName = _gameAccountInfo->Name; - logonResponse->GameAccountFlags = GAMEACCOUNT_FLAG_PROPASS_LOCK; + logonResponse->GameAccountFlags = GAMEACCOUNT_FLAG_PROPASS; logonResponse->FailedLogins = _accountInfo->FailedLogins; SQLTransaction trans = LoginDatabase.BeginTransaction();