From cda13ffb4bd58dd7094c7475c32d5326279a228a Mon Sep 17 00:00:00 2001 From: Michael Carpenter Date: Sat, 8 Sep 2012 08:34:29 -0400 Subject: [PATCH] Change in the libwebsocket_write call to fix string length, due to passing a pointer in the middle of a string. --- plugins/websocketsink/websocketsink.cpp | 2 +- plugins/websocketsink/websocketsinkmanager.cpp | 8 ++++---- plugins/websocketsourceplugin/websocketsource.cpp | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/plugins/websocketsink/websocketsink.cpp b/plugins/websocketsink/websocketsink.cpp index e49535d..203920b 100644 --- a/plugins/websocketsink/websocketsink.cpp +++ b/plugins/websocketsink/websocketsink.cpp @@ -73,7 +73,7 @@ void WebSocketSink::propertyChanged(VehicleProperty::Property property, Abstract char *new_response = new char[LWS_SEND_BUFFER_PRE_PADDING + strlen(replystr.c_str()) + LWS_SEND_BUFFER_POST_PADDING]; new_response+=LWS_SEND_BUFFER_PRE_PADDING; strcpy(new_response,replystr.c_str()); - libwebsocket_write(m_wsi, (unsigned char*)new_response, strlen(new_response), LWS_WRITE_TEXT); + libwebsocket_write(m_wsi, (unsigned char*)new_response, strlen(new_response-LWS_SEND_BUFFER_PRE_PADDING), LWS_WRITE_TEXT); delete (char*)(new_response-LWS_SEND_BUFFER_PRE_PADDING); } WebSocketSink::~WebSocketSink() diff --git a/plugins/websocketsink/websocketsinkmanager.cpp b/plugins/websocketsink/websocketsinkmanager.cpp index 913b54f..118463f 100644 --- a/plugins/websocketsink/websocketsinkmanager.cpp +++ b/plugins/websocketsink/websocketsinkmanager.cpp @@ -129,7 +129,7 @@ void WebSocketSinkManager::addSingleShotSink(libwebsocket* socket, VehicleProper char *new_response = new char[LWS_SEND_BUFFER_PRE_PADDING + strlen(replystr.c_str()) + LWS_SEND_BUFFER_POST_PADDING]; new_response+=LWS_SEND_BUFFER_PRE_PADDING; strcpy(new_response,replystr.c_str()); - libwebsocket_write(socket, (unsigned char*)new_response, strlen(new_response), LWS_WRITE_TEXT); + libwebsocket_write(socket, (unsigned char*)new_response, strlen(new_response-LWS_SEND_BUFFER_PRE_PADDING), LWS_WRITE_TEXT); //TODO: run valgrind on this. libwebsocket's documentation says NOTHING about this, yet malloc insists it's true. //delete new_response; <- Unneeded. Apparently libwebsocket free's it. @@ -155,7 +155,7 @@ void WebSocketSinkManager::removeSink(libwebsocket* socket,VehicleProperty::Prop char *new_response = new char[LWS_SEND_BUFFER_PRE_PADDING + strlen(replystr.c_str()) + LWS_SEND_BUFFER_POST_PADDING]; new_response+=LWS_SEND_BUFFER_PRE_PADDING; strcpy(new_response,replystr.c_str()); - libwebsocket_write(socket, (unsigned char*)new_response, strlen(new_response), LWS_WRITE_TEXT); + libwebsocket_write(socket, (unsigned char*)new_response, strlen(new_response-LWS_SEND_BUFFER_PRE_PADDING), LWS_WRITE_TEXT); delete (char*)(new_response-LWS_SEND_BUFFER_PRE_PADDING); } } @@ -203,7 +203,7 @@ void WebSocketSinkManager::addSink(libwebsocket* socket, VehicleProperty::Proper char *new_response = new char[LWS_SEND_BUFFER_PRE_PADDING + strlen(replystr.c_str()) + LWS_SEND_BUFFER_POST_PADDING]; new_response+=LWS_SEND_BUFFER_PRE_PADDING; strcpy(new_response,replystr.c_str()); - libwebsocket_write(socket, (unsigned char*)new_response, strlen(new_response), LWS_WRITE_TEXT); + libwebsocket_write(socket, (unsigned char*)new_response, strlen(new_response-LWS_SEND_BUFFER_PRE_PADDING), LWS_WRITE_TEXT); delete (char*)(new_response-LWS_SEND_BUFFER_PRE_PADDING); WebSocketSink *sink = new WebSocketSink(m_engine,socket,uuid,property,tmpstr); m_sinkMap[property] = sink; @@ -500,7 +500,7 @@ static int websocket_callback(struct libwebsocket_context *context,struct libweb char *new_response = new char[LWS_SEND_BUFFER_PRE_PADDING + strlen(replystr.c_str()) + LWS_SEND_BUFFER_POST_PADDING]; new_response+=LWS_SEND_BUFFER_PRE_PADDING; strcpy(new_response,replystr.c_str()); - libwebsocket_write(wsi, (unsigned char*)new_response, strlen(new_response), LWS_WRITE_TEXT); + libwebsocket_write(wsi, (unsigned char*)new_response, strlen(new_response-LWS_SEND_BUFFER_PRE_PADDING), LWS_WRITE_TEXT); delete (char*)(new_response-LWS_SEND_BUFFER_PRE_PADDING); } } diff --git a/plugins/websocketsourceplugin/websocketsource.cpp b/plugins/websocketsourceplugin/websocketsource.cpp index a26760e..5bfe8e8 100644 --- a/plugins/websocketsourceplugin/websocketsource.cpp +++ b/plugins/websocketsourceplugin/websocketsource.cpp @@ -66,7 +66,7 @@ void WebSocketSource::checkSubscriptions() char *new_response = new char[LWS_SEND_BUFFER_PRE_PADDING + strlen(replystr.c_str()) + LWS_SEND_BUFFER_POST_PADDING]; new_response+=LWS_SEND_BUFFER_PRE_PADDING; strcpy(new_response,replystr.c_str()); - libwebsocket_write(clientsocket, (unsigned char*)new_response, strlen(new_response), LWS_WRITE_TEXT); + libwebsocket_write(clientsocket, (unsigned char*)new_response, strlen(new_response-LWS_SEND_BUFFER_PRE_PADDING), LWS_WRITE_TEXT); delete (char*)(new_response-LWS_SEND_BUFFER_PRE_PADDING); } } @@ -145,7 +145,7 @@ static int callback_http_only(libwebsocket_context *context,struct libwebsocket char *new_response = new char[LWS_SEND_BUFFER_PRE_PADDING + strlen(replystr.c_str()) + LWS_SEND_BUFFER_POST_PADDING]; new_response+=LWS_SEND_BUFFER_PRE_PADDING; strcpy(new_response,replystr.c_str()); - libwebsocket_write(wsi, (unsigned char*)new_response, strlen(new_response), LWS_WRITE_TEXT); + libwebsocket_write(wsi, (unsigned char*)new_response, strlen(new_response-LWS_SEND_BUFFER_PRE_PADDING), LWS_WRITE_TEXT); delete (char*)(new_response-LWS_SEND_BUFFER_PRE_PADDING); break; -- 2.7.4