Skip to content

Commit

Permalink
net/http/httputil: fix DumpRequestOut on https URLs
Browse files Browse the repository at this point in the history
Don't try to do an SSL negotiation with a *bytes.Buffer.

Fixes #3135

R=golang-dev, dsymonds
CC=golang-dev
https://golang.org/cl/5709050
  • Loading branch information
bradfitz committed Feb 29, 2012
1 parent e266d60 commit 1b1039a
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 0 deletions.
9 changes: 9 additions & 0 deletions src/pkg/net/http/httputil/dump.go
Expand Up @@ -59,6 +59,15 @@ func DumpRequestOut(req *http.Request, body bool) ([]byte, error) {
}
}

// Since we're using the actual Transport code to write the request,
// switch to http so the Transport doesn't try to do an SSL
// negotiation with our dumpConn and its bytes.Buffer & pipe.
// The wire format for https and http are the same, anyway.
if req.URL.Scheme == "https" {
defer func() { req.URL.Scheme = "https" }()
req.URL.Scheme = "http"
}

// Use the actual Transport code to record what we would send
// on the wire, but not using TCP. Use a Transport with a
// customer dialer that returns a fake net.Conn that waits
Expand Down
12 changes: 12 additions & 0 deletions src/pkg/net/http/httputil/dump_test.go
Expand Up @@ -71,6 +71,18 @@ var dumpTests = []dumpTest{
"User-Agent: Go http package\r\n" +
"Accept-Encoding: gzip\r\n\r\n",
},

// Test that an https URL doesn't try to do an SSL negotiation
// with a bytes.Buffer and hang with all goroutines not
// runnable.
{
Req: *mustNewRequest("GET", "https://example.com/foo", nil),

WantDumpOut: "GET /foo HTTP/1.1\r\n" +
"Host: example.com\r\n" +
"User-Agent: Go http package\r\n" +
"Accept-Encoding: gzip\r\n\r\n",
},
}

func TestDumpRequest(t *testing.T) {
Expand Down

0 comments on commit 1b1039a

Please sign in to comment.