From c24f5343e9098a9f987603bbf15ef9492d575373 Mon Sep 17 00:00:00 2001 From: Chilledheart Date: Thu, 20 Jul 2023 13:55:49 +0800 Subject: [PATCH] naive: fix malformed http 1.0 request HttpRequestHeaders::ToString not only has CRLR for every header, but also has the trailing CRLR. It might affect POST/PUT methods. --- src/net/tools/naive/http_proxy_server_socket.cc | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/net/tools/naive/http_proxy_server_socket.cc b/src/net/tools/naive/http_proxy_server_socket.cc index cdbd9c3465..c01c675461 100644 --- a/src/net/tools/naive/http_proxy_server_socket.cc +++ b/src/net/tools/naive/http_proxy_server_socket.cc @@ -379,13 +379,13 @@ int HttpProxyServerSocket::DoHeaderReadComplete(int result) { HttpRequestHeaders sanitized_headers = headers; sanitized_headers.RemoveHeader(HttpRequestHeaders::kProxyConnection); sanitized_headers.RemoveHeader(HttpRequestHeaders::kProxyAuthorization); - std::stringstream ss; - ss << buffer_.substr(0, first_line_end); - ss << "\r\n"; + + std::ostringstream ss; + ss << buffer_.substr(0, first_line_end) << "\r\n"; ss << sanitized_headers.ToString(); - ss << "\r\n"; - ss << "\r\n"; - ss << buffer_.substr(header_end + 4); + if (buffer_.size() > header_end + 4) { + ss << buffer_.substr(header_end + 4); + } buffer_ = ss.str(); // Skip padding write for raw http proxy completed_handshake_ = true;