From c2bdbeb3077308df9462c29eb9aace2342dc7624 Mon Sep 17 00:00:00 2001 From: whaffman Date: Thu, 30 Oct 2025 15:06:36 +0100 Subject: [PATCH] support different headerseperators --- webserv-tester | 2 +- webserv/handler/CgiHandler.cpp | 10 +++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/webserv-tester b/webserv-tester index 6afa83b..9165a63 160000 --- a/webserv-tester +++ b/webserv-tester @@ -1 +1 @@ -Subproject commit 6afa83b23a83cfb98034ab432850cb8a660ff222 +Subproject commit 9165a63af961a9892e1d716c984328bf4756cd34 diff --git a/webserv/handler/CgiHandler.cpp b/webserv/handler/CgiHandler.cpp index 89efbab..f88cfa0 100644 --- a/webserv/handler/CgiHandler.cpp +++ b/webserv/handler/CgiHandler.cpp @@ -161,6 +161,7 @@ void CgiHandler::setPid(int pid) void CgiHandler::parseCgiOutput() { Log::trace(LOCATION); + long headerSeperatorSize = 2; // Parse the headers from the buffer auto header = std::string(buffer_.begin(), buffer_.end()); @@ -169,18 +170,25 @@ void CgiHandler::parseCgiOutput() header.find("\n\n"), header.find("\r\r"), }); + if (headerEnd == std::string::npos) { Log::debug("CGI output headers not complete yet"); return; } + + if (header.substr(static_cast(headerEnd), 2) == "\r\n") + { + headerSeperatorSize = 4; + } + Log::debug("headerseperator: " + header.substr(static_cast(headerEnd), 2)); // Parse the headers std::string headers(buffer_.begin(), buffer_.begin() + static_cast(headerEnd)); Log::debug("CGI output headers: " + headers); parseCgiHeaders(headers); - buffer_.erase(buffer_.begin(), buffer_.begin() + static_cast(headerEnd) + 4); + buffer_.erase(buffer_.begin(), buffer_.begin() + static_cast(headerEnd) + headerSeperatorSize); parseCgiBody(); }