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

Updated behavior, so if a websocket write occurs on a non microstack thread, and it needs to merge buffers, it will allocate off the heap instead of the stack, to prevent a stack overflow if a very large amount of data is passed in.

This commit is contained in:
Bryan Roe
2019-01-29 17:14:44 -08:00
parent dfbe5bca50
commit 305f04ad2e

View File

@@ -3435,7 +3435,8 @@ ILibTransport_DoneState ILibDuktape_httpStream_webSocket_WriteWebSocketPacket(IL
ILibTransport_DoneState retVal = ILibTransport_DoneState_ERROR;
ILibWebClient_WebSocket_FragmentFlags bufferFragment;
buffer = _buffer;
bufferLen = _bufferLen;
bufferFragment = _bufferFragment;
@@ -3506,11 +3507,11 @@ ILibTransport_DoneState ILibDuktape_httpStream_webSocket_WriteWebSocketPacket(IL
else
{
// We're not on the Duktape Thread, so we need to merge these buffers, to make a single write
char *dataFrame = ILibMemory_AllocateA(headerLen + bufferLen);
char *dataFrame = ILibMemory_SmartAllocate(headerLen + bufferLen);
memcpy_s(dataFrame, headerLen, header, headerLen);
memcpy_s(dataFrame + headerLen, bufferLen, buffer, bufferLen);
retVal = ILibDuktape_DuplexStream_WriteData(state->encodedStream, dataFrame, headerLen + bufferLen) == 0 ? ILibTransport_DoneState_COMPLETE : ILibTransport_DoneState_INCOMPLETE;
ILibMemory_Free(dataFrame);
}
}