From 305f04ad2ea27e0294d3ece9ffbfe445bde1372f Mon Sep 17 00:00:00 2001 From: Bryan Roe Date: Tue, 29 Jan 2019 17:14:44 -0800 Subject: [PATCH] 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. --- microscript/ILibDuktape_HttpStream.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/microscript/ILibDuktape_HttpStream.c b/microscript/ILibDuktape_HttpStream.c index 4cfdb07..377e3b1 100644 --- a/microscript/ILibDuktape_HttpStream.c +++ b/microscript/ILibDuktape_HttpStream.c @@ -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); } }