mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-29 13:20:54 +00:00
Protect against invalid socket data potentially causing crashes
This commit is contained in:
@@ -180,6 +180,8 @@ static bool HandleHandshakeClient(ActiveClient &activeClient, ClientThread *thre
|
||||
{
|
||||
ReadSerialiser ser(new StreamReader(threadData->socket, Ownership::Nothing), Ownership::Stream);
|
||||
|
||||
ser.SetStreamingMode(true);
|
||||
|
||||
// this thread just handles receiving the handshake and sending a busy signal without blocking
|
||||
// the server thread
|
||||
RemoteServerPacket type = ser.ReadChunk<RemoteServerPacket>();
|
||||
@@ -1206,6 +1208,8 @@ RENDERDOC_CreateRemoteServerConnection(const rdcstr &URL, IRemoteServer **rend)
|
||||
{
|
||||
ReadSerialiser ser(new StreamReader(sock, Ownership::Nothing), Ownership::Stream);
|
||||
|
||||
ser.SetStreamingMode(true);
|
||||
|
||||
RemoteServerPacket type = ser.ReadChunk<RemoteServerPacket>();
|
||||
|
||||
uint32_t remoteVersion = 0;
|
||||
|
||||
@@ -471,6 +471,8 @@ void RenderDoc::TargetControlServerThread(Network::Socket *sock)
|
||||
{
|
||||
ReadSerialiser ser(new StreamReader(client, Ownership::Nothing), Ownership::Stream);
|
||||
|
||||
ser.SetStreamingMode(true);
|
||||
|
||||
PacketType type = ser.ReadChunk<PacketType>();
|
||||
|
||||
if(type != ePacket_Handshake)
|
||||
|
||||
@@ -179,6 +179,13 @@ uint32_t Serialiser<SerialiserMode::Reading>::BeginChunk(uint32_t, uint64_t)
|
||||
m_ChunkMetadata.length = chunkSize;
|
||||
}
|
||||
|
||||
uint64_t len = m_ChunkMetadata.length;
|
||||
VerifyArraySize(m_ChunkMetadata.length);
|
||||
// if length was set to 0 by VerifyArraySize due to being invalid, set it to something
|
||||
// reasonable just to prevent knock-on problems with error handling
|
||||
if(len != 0 && m_ChunkMetadata.length == 0)
|
||||
m_ChunkMetadata.length = 1024;
|
||||
|
||||
m_LastChunkOffset = m_Read->GetOffset();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user