aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2019-07-21 16:32:49 +0200
committerShauren <shauren.trinity@gmail.com>2019-07-21 16:32:49 +0200
commit3058d8c5ab50aa648a028fa38e64e1b72ae9305a (patch)
treec32cd626797995f4ff501257cb84aafcfd639bee
parentf7089babf51d4ebd0d903e2e8ac098f38d3391fc (diff)
Core/bnetserver: Fixed crash happening when sending packets larger than 4096 bytes
-rw-r--r--src/server/bnetserver/Server/Session.cpp26
1 files changed, 13 insertions, 13 deletions
diff --git a/src/server/bnetserver/Server/Session.cpp b/src/server/bnetserver/Server/Session.cpp
index 7ebb7abb58b..20ca5a8c603 100644
--- a/src/server/bnetserver/Server/Session.cpp
+++ b/src/server/bnetserver/Server/Session.cpp
@@ -149,14 +149,14 @@ void Battlenet::Session::SendResponse(uint32 token, pb::Message const* response)
uint16 headerSize = header.ByteSize();
EndianConvertReverse(headerSize);
- MessageBuffer packet;
+ MessageBuffer packet(sizeof(headerSize) + header.GetCachedSize() + response->GetCachedSize());
packet.Write(&headerSize, sizeof(headerSize));
uint8* ptr = packet.GetWritePointer();
- packet.WriteCompleted(header.ByteSize());
- header.SerializeToArray(ptr, header.ByteSize());
+ packet.WriteCompleted(header.GetCachedSize());
+ header.SerializePartialToArray(ptr, header.GetCachedSize());
ptr = packet.GetWritePointer();
- packet.WriteCompleted(response->ByteSize());
- response->SerializeToArray(ptr, response->ByteSize());
+ packet.WriteCompleted(response->GetCachedSize());
+ response->SerializeToArray(ptr, response->GetCachedSize());
AsyncWrite(&packet);
}
@@ -171,11 +171,11 @@ void Battlenet::Session::SendResponse(uint32 token, uint32 status)
uint16 headerSize = header.ByteSize();
EndianConvertReverse(headerSize);
- MessageBuffer packet;
+ MessageBuffer packet(sizeof(headerSize) + header.GetCachedSize());
packet.Write(&headerSize, sizeof(headerSize));
uint8* ptr = packet.GetWritePointer();
- packet.WriteCompleted(header.ByteSize());
- header.SerializeToArray(ptr, header.ByteSize());
+ packet.WriteCompleted(header.GetCachedSize());
+ header.SerializeToArray(ptr, header.GetCachedSize());
AsyncWrite(&packet);
}
@@ -192,14 +192,14 @@ void Battlenet::Session::SendRequest(uint32 serviceHash, uint32 methodId, pb::Me
uint16 headerSize = header.ByteSize();
EndianConvertReverse(headerSize);
- MessageBuffer packet;
+ MessageBuffer packet(sizeof(headerSize) + header.GetCachedSize() + request->GetCachedSize());
packet.Write(&headerSize, sizeof(headerSize));
uint8* ptr = packet.GetWritePointer();
- packet.WriteCompleted(header.ByteSize());
- header.SerializeToArray(ptr, header.ByteSize());
+ packet.WriteCompleted(header.GetCachedSize());
+ header.SerializeToArray(ptr, header.GetCachedSize());
ptr = packet.GetWritePointer();
- packet.WriteCompleted(request->ByteSize());
- request->SerializeToArray(ptr, request->ByteSize());
+ packet.WriteCompleted(request->GetCachedSize());
+ request->SerializeToArray(ptr, request->GetCachedSize());
AsyncWrite(&packet);
}