From f4621bd5c034a9d8586a695e7ea8d8b7ad459f4d Mon Sep 17 00:00:00 2001 From: KimLS Date: Sat, 11 Oct 2014 15:44:27 -0700 Subject: [PATCH] Fix for crash when sending too large a response packet, less efficient but should handle every packet type now. Can retool if allocations end up being a problem. --- web_interface/web_interface.cpp | 13 +++++-------- web_interface/web_interface.h | 2 -- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/web_interface/web_interface.cpp b/web_interface/web_interface.cpp index c941e35a4..5f39558ad 100644 --- a/web_interface/web_interface.cpp +++ b/web_interface/web_interface.cpp @@ -97,16 +97,13 @@ int callback_eqemu(libwebsocket_context *context, libwebsocket *wsi, libwebsocke break; } case LWS_CALLBACK_SERVER_WRITEABLE: { - //send messages here - char out_message[MAX_MESSAGE_LENGTH + LWS_SEND_BUFFER_PRE_PADDING + LWS_SEND_BUFFER_POST_PADDING + 1]; + std::vector out_message; for (auto iter = session->send_queue->begin(); iter != session->send_queue->end(); ++iter) { - - //out_message - memset(out_message, 0, MAX_MESSAGE_LENGTH + LWS_SEND_BUFFER_PRE_PADDING + LWS_SEND_BUFFER_POST_PADDING + 1); + out_message.resize((*iter).size() + LWS_SEND_BUFFER_PRE_PADDING + LWS_SEND_BUFFER_POST_PADDING + 1); + memset(&out_message[0], 0, (*iter).size() + LWS_SEND_BUFFER_PRE_PADDING + LWS_SEND_BUFFER_POST_PADDING + 1); memcpy(&out_message[LWS_SEND_BUFFER_PRE_PADDING], &(*iter)[0], (*iter).size()); - auto n = libwebsocket_write(wsi, (unsigned char*)&out_message[LWS_SEND_BUFFER_PRE_PADDING], (*iter).size(), LWS_WRITE_TEXT); - if (n < (*iter).size()) { - //couldn't write the message + int n = libwebsocket_write(wsi, (unsigned char*)&out_message[LWS_SEND_BUFFER_PRE_PADDING], (*iter).size(), LWS_WRITE_TEXT); + if(n < (*iter).size()) { return -1; } } diff --git a/web_interface/web_interface.h b/web_interface/web_interface.h index f80c29ecd..c81d86d8d 100644 --- a/web_interface/web_interface.h +++ b/web_interface/web_interface.h @@ -39,8 +39,6 @@ #include #include -#define MAX_MESSAGE_LENGTH 2048 - struct per_session_data_eqemu { std::string auth; std::string uuid;