mirror of https://github.com/golang/go.git
net/http: make Transport.roundTrip close body on invalid method
Updates #35015
Change-Id: Ibfe8f72ed3887ca88ce9c1d8a29dacda72f3fe17
GitHub-Last-Rev: 4bfc56e716
GitHub-Pull-Request: golang/go#35014
Reviewed-on: https://go-review.googlesource.com/c/go/+/202237
Reviewed-by: Emmanuel Odeke <emm.odeke@gmail.com>
Run-TryBot: Emmanuel Odeke <emm.odeke@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
parent
72275c0dea
commit
39cfb7609d
|
|
@ -492,6 +492,7 @@ func (t *Transport) roundTrip(req *Request) (*Response, error) {
|
|||
return nil, &badStringError{"unsupported protocol scheme", scheme}
|
||||
}
|
||||
if req.Method != "" && !validMethod(req.Method) {
|
||||
req.closeBody()
|
||||
return nil, fmt.Errorf("net/http: invalid method %q", req.Method)
|
||||
}
|
||||
if req.URL.Host == "" {
|
||||
|
|
|
|||
|
|
@ -5719,3 +5719,32 @@ func TestInvalidHeaderResponse(t *testing.T) {
|
|||
t.Errorf(`bad "Foo " header value: %q, want %q`, v, "bar")
|
||||
}
|
||||
}
|
||||
|
||||
type bodyCloser bool
|
||||
|
||||
func (bc *bodyCloser) Close() error {
|
||||
*bc = true
|
||||
return nil
|
||||
}
|
||||
func (bc *bodyCloser) Read(b []byte) (n int, err error) {
|
||||
return 0, io.EOF
|
||||
}
|
||||
|
||||
func TestInvalidMethodClosesBody(t *testing.T) {
|
||||
cst := httptest.NewServer(HandlerFunc(func(w ResponseWriter, r *Request) {}))
|
||||
defer cst.Close()
|
||||
var bc bodyCloser
|
||||
u, _ := url.Parse(cst.URL)
|
||||
req := &Request{
|
||||
Method: " ",
|
||||
URL: u,
|
||||
Body: &bc,
|
||||
}
|
||||
_, err := DefaultClient.Do(req)
|
||||
if err == nil {
|
||||
t.Fatal("Expected an error")
|
||||
}
|
||||
if !bc {
|
||||
t.Fatal("Expected body to have been closed")
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue