From 7aca2d181a6580d8064f7eaf134aed27db5a17dd Mon Sep 17 00:00:00 2001 From: Gunnar Beutner Date: Mon, 17 May 2021 20:30:24 +0200 Subject: [PATCH] WebServer: Don't read until EOF There's no guarantee that the client has closed the socket for writing. Instead we should just read until the first empty line. Fixes #7064. --- Userland/Services/WebServer/Client.cpp | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/Userland/Services/WebServer/Client.cpp b/Userland/Services/WebServer/Client.cpp index 49462bba66..8b30919894 100644 --- a/Userland/Services/WebServer/Client.cpp +++ b/Userland/Services/WebServer/Client.cpp @@ -40,15 +40,18 @@ void Client::die() void Client::start() { m_socket->on_ready_to_read = [this] { - auto raw_request = m_socket->read_all(); - if (raw_request.is_empty()) { - die(); - return; + StringBuilder builder; + for (;;) { + auto line = m_socket->read_line(); + if (line.is_empty()) + break; + builder.append(line); + builder.append("\r\n"); } - dbgln("Got raw request: '{}'", String::copy(raw_request)); - - handle_request(raw_request.bytes()); + auto request = builder.to_byte_buffer(); + dbgln("Got raw request: '{}'", String::copy(request)); + handle_request(request); die(); }; }