From bf5ec12dd5d7787777a7621e40e0e675f49d70d6 Mon Sep 17 00:00:00 2001 From: Yasuhiro Matsumoto Date: Thu, 21 Jul 2011 11:33:59 -0400 Subject: [PATCH] http: do not parse req.URL for CONNECT CONNECT's argument is not a URL. R=golang-dev, bradfitz, rsc CC=golang-dev https://golang.org/cl/4808044 --- src/pkg/http/readrequest_test.go | 22 ++++++++++++++++++++++ src/pkg/http/request.go | 11 ++++++++--- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/src/pkg/http/readrequest_test.go b/src/pkg/http/readrequest_test.go index 79f8de70d3..adac86a47f 100644 --- a/src/pkg/http/readrequest_test.go +++ b/src/pkg/http/readrequest_test.go @@ -152,6 +152,28 @@ var reqTests = []reqTest{ noBody, "parse : empty url", }, + + // CONNECT method. + { + "CONNECT proxy.example.com:443 HTTP/1.0\r\n" + + "Host: proxy.example.com\r\n\r\n", + + &Request{ + Method: "CONNECT", + RawURL: "proxy.example.com:443", + URL: nil, + Proto: "HTTP/1.0", + ProtoMajor: 1, + ProtoMinor: 0, + Close: false, + ContentLength: 0, + Host: "proxy.example.com", + Form: Values{}, + }, + + noBody, + noError, + }, } func TestReadRequest(t *testing.T) { diff --git a/src/pkg/http/request.go b/src/pkg/http/request.go index 2917cc1e6e..cfde345f10 100644 --- a/src/pkg/http/request.go +++ b/src/pkg/http/request.go @@ -548,8 +548,11 @@ func ReadRequest(b *bufio.Reader) (req *Request, err os.Error) { return nil, &badStringError{"malformed HTTP version", req.Proto} } - if req.URL, err = ParseRequestURL(req.RawURL); err != nil { - return nil, err + isConnect := strings.ToUpper(req.Method) == "CONNECT" + if !isConnect { + if req.URL, err = ParseRequestURL(req.RawURL); err != nil { + return nil, err + } } // Subsequent lines: Key: value. @@ -566,7 +569,9 @@ func ReadRequest(b *bufio.Reader) (req *Request, err os.Error) { // GET http://www.google.com/index.html HTTP/1.1 // Host: doesntmatter // the same. In the second case, any Host line is ignored. - req.Host = req.URL.Host + if !isConnect { + req.Host = req.URL.Host + } if req.Host == "" { req.Host = req.Header.Get("Host") } -- 2.50.0