From 49b4daae8383780954b45a8ebf446c9383d8ecf7 Mon Sep 17 00:00:00 2001 From: Benedikt Galbavy Date: Wed, 18 Oct 2023 00:37:15 +0200 Subject: [PATCH] fixed messages longer than buffer size issue if command end is never received --- server.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/server.cpp b/server.cpp index 9c0b395..5beddbe 100644 --- a/server.cpp +++ b/server.cpp @@ -15,7 +15,6 @@ #include #include -#include #include #include @@ -191,6 +190,8 @@ void *clientCommunication(void *data) return NULL; } + std::string incomplete_message; + do { size = recv(*current_socket, buffer, BUF - 1, 0); if (size == -1) { @@ -216,7 +217,7 @@ void *clientCommunication(void *data) buffer[size] = '\0'; - std::stringstream ss(buffer); + std::stringstream ss(incomplete_message.append(buffer)); std::string line; std::vector lines; @@ -233,9 +234,15 @@ void *clientCommunication(void *data) else if (boost::iequals(lines.at(0), "READ")) cmd = READ; else if (boost::iequals(lines.at(0), "DEL")) cmd = DEL; else if (boost::iequals(lines.at(0), "QUIT")) cmd = QUIT; + else continue; // TODO: error message switch (cmd) { case SEND: + if (lines.size() < 5 || lines.back().compare(".") != 0) { + incomplete_message = buffer; + continue; // issues if command end is never received + } + if (lines.at(3).length() > 80) { // send error break;