Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(611)

Unified Diff: net/http/proxy_client_socket.cc

Issue 769043003: Sanitize headers in Proxy Authentication Required responses (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix sleevi's nit Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/http/proxy_client_socket.h ('k') | net/spdy/spdy_proxy_client_socket.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/http/proxy_client_socket.cc
diff --git a/net/http/proxy_client_socket.cc b/net/http/proxy_client_socket.cc
index dcfae037ce721c92bd95dfa3aeded77bd2f6bf62..3c539c6895e295a98f9645070e4258bbf78b5d73 100644
--- a/net/http/proxy_client_socket.cc
+++ b/net/http/proxy_client_socket.cc
@@ -17,6 +17,20 @@
namespace net {
+namespace {
+
+void CopyHeaderValues(scoped_refptr<HttpResponseHeaders> source,
+ scoped_refptr<HttpResponseHeaders> dest,
+ const std::string& header_name) {
+ void* iter = NULL;
+ std::string header_value;
+
+ while (source->EnumerateHeader(&iter, header_name, &header_value))
+ dest->AddHeader(header_name + ": " + header_value);
+}
+
+} // namespace
+
// static
void ProxyClientSocket::BuildTunnelRequest(
const HttpRequestInfo& request_info,
@@ -72,22 +86,39 @@ void ProxyClientSocket::LogBlockedTunnelResponse(int http_status_code,
}
// static
-bool ProxyClientSocket::SanitizeProxyRedirect(HttpResponseInfo* response,
- const GURL& url) {
+bool ProxyClientSocket::SanitizeProxyAuth(HttpResponseInfo* response) {
+ DCHECK(response && response->headers.get());
+
+ scoped_refptr<HttpResponseHeaders> old_headers = response->headers;
+
+ const char kHeaders[] = "HTTP/1.1 407 Proxy Authentication Required\n\n";
+ scoped_refptr<HttpResponseHeaders> new_headers = new HttpResponseHeaders(
+ HttpUtil::AssembleRawHeaders(kHeaders, arraysize(kHeaders)));
+
+ new_headers->ReplaceStatusLine(old_headers->GetStatusLine());
+ CopyHeaderValues(old_headers, new_headers, "Connection");
+ CopyHeaderValues(old_headers, new_headers, "Proxy-Authenticate");
+
+ response->headers = new_headers;
+ return true;
+}
+
+// static
+bool ProxyClientSocket::SanitizeProxyRedirect(HttpResponseInfo* response) {
DCHECK(response && response->headers.get());
std::string location;
if (!response->headers->IsRedirect(&location))
return false;
- // Return minimal headers; set "Content-length: 0" to ignore response body.
- std::string fake_response_headers =
- base::StringPrintf("HTTP/1.0 302 Found\n"
- "Location: %s\n"
- "Content-length: 0\n"
- "Connection: close\n"
- "\n",
- location.c_str());
+ // Return minimal headers; set "Content-Length: 0" to ignore response body.
+ std::string fake_response_headers = base::StringPrintf(
+ "HTTP/1.0 302 Found\n"
+ "Location: %s\n"
+ "Content-Length: 0\n"
+ "Connection: close\n"
+ "\n",
+ location.c_str());
std::string raw_headers =
HttpUtil::AssembleRawHeaders(fake_response_headers.data(),
fake_response_headers.length());
« no previous file with comments | « net/http/proxy_client_socket.h ('k') | net/spdy/spdy_proxy_client_socket.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698