Core/bnetserver: Fixed crash happening when sending packets larger than 4096 bytes

This commit is contained in:
Shauren
2019-07-21 16:32:49 +02:00
parent f7089babf5
commit 3058d8c5ab

View File

@@ -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);
}