From b5c6cac048fcc195f6d590f973a0ba70a3b76f9f Mon Sep 17 00:00:00 2001 From: Cory McWilliams Date: Mon, 20 Jun 2022 14:30:00 +0000 Subject: [PATCH] Another leak. git-svn-id: https://www.unprompted.com/svn/projects/tildefriends/trunk@3913 ed5197a5-7fde-0310-b194-c3ffbd925b24 --- core/httpd.js | 7 ++++++- src/socket.js.c | 10 ++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/core/httpd.js b/core/httpd.js index 5cd48aa3..e295a7dd 100644 --- a/core/httpd.js +++ b/core/httpd.js @@ -237,7 +237,12 @@ function handleWebSocketRequest(request, response, client) { var array = new Uint8Array(packet.length + message.length); array.set(packet, 0); array.set(message, packet.length); - return client.write(array); + try { + return client.write(array); + } catch (error) { + client.close(); + throw error; + } } response.onMessage = null; diff --git a/src/socket.js.c b/src/socket.js.c index 8e0b7b1f..5c9d29b4 100644 --- a/src/socket.js.c +++ b/src/socket.js.c @@ -891,13 +891,19 @@ int _socket_writeInternal(socket_t* socket, promiseid_t promise, const char* dat uv_write_t* request = (uv_write_t*)rawBuffer; memcpy(rawBuffer + sizeof(uv_write_t), data, length); - uv_buf_t buffer = { + uv_buf_t buffer = + { .base = rawBuffer + sizeof(uv_write_t), .len = length, }; request->data = (void*)(intptr_t)promise; - return uv_write(request, (uv_stream_t*)&socket->_socket, &buffer, 1, _socket_onWrite); + int result = uv_write(request, (uv_stream_t*)&socket->_socket, &buffer, 1, _socket_onWrite); + if (result != 0) + { + tf_free(rawBuffer); + } + return result; } static int _socket_write_tls(socket_t* socket, promiseid_t promise, const char* data, size_t size)