1
0
mirror of https://github.com/Ylianst/MeshAgent synced 2025-12-06 00:13:33 +00:00

Fixed stack overflow that could occur when writing very large single fragment websocket payloads

This commit is contained in:
Bryan Roe
2021-08-25 10:46:30 -07:00
parent 8f8e42e985
commit 46ccba5164

View File

@@ -4075,7 +4075,7 @@ ILibTransport_DoneState ILibDuktape_httpStream_webSocket_WriteWebSocketPacket(IL
if (flags & WEBSOCKET_MASK)
{
// We have to copy memory anyways to mask, so we might as well copy the extra few bytes and make a single buffer
char *dataFrame = ILibMemory_AllocateA(headerLen + 4 + bufferLen);
char *dataFrame = ((headerLen + 4 + bufferLen) < 65535) ? ILibMemory_AllocateA(headerLen + 4 + bufferLen) : ILibMemory_SmartAllocate(headerLen + 4 + bufferLen);
char *maskKey = (dataFrame + headerLen);
memcpy_s(dataFrame, headerLen, header, headerLen);
@@ -4091,6 +4091,7 @@ ILibTransport_DoneState ILibDuktape_httpStream_webSocket_WriteWebSocketPacket(IL
for (x = (x << 2); x < bufferLen; ++x) { dataFrame[x + headerLen + 4] = buffer[x] ^ maskKey[x % 4]; } // Mask the reminder
}
retVal = ILibDuktape_DuplexStream_WriteData(state->encodedStream, dataFrame, headerLen + 4 + bufferLen) == 0 ? ILibTransport_DoneState_COMPLETE : ILibTransport_DoneState_INCOMPLETE;
ILibMemory_Free(dataFrame);
}
else
{