]> Cypherpunks repositories - gostls13.git/commitdiff
net/http: verify RoundTripper invariants in the send function
authorBryan C. Mills <bcmills@google.com>
Mon, 2 Mar 2020 15:16:39 +0000 (10:16 -0500)
committerBryan C. Mills <bcmills@google.com>
Mon, 2 Mar 2020 15:39:23 +0000 (15:39 +0000)
Issue #37598 reports a nil-panic in *Client.send that can
only occur if one of the RoundTripper invariants is violated.
Unfortunately, that condition is currently difficult to diagnose: it
manifests as a panic during a Response field access, rather than
something the user can easily associate with an specific erroneous
RoundTripper implementation.

No test because the new code paths are supposed to be unreachable.

Updates #37598

Change-Id: If0451e9c6431f6fab7137de43727297a80def05b
Reviewed-on: https://go-review.googlesource.com/c/go/+/221818
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/net/http/client.go

index a496f1c0c7534ee45ccd86765dd558fa22c5780c..ec24516833cf4c033fcde67512172625cea9e97d 100644 (file)
@@ -265,6 +265,12 @@ func send(ireq *Request, rt RoundTripper, deadline time.Time) (resp *Response, d
                }
                return nil, didTimeout, err
        }
+       if resp == nil {
+               return nil, didTimeout, fmt.Errorf("http: RoundTripper implementation (%T) returned a nil *Response with a nil error", rt)
+       }
+       if resp.Body == nil {
+               return nil, didTimeout, fmt.Errorf("http: RoundTripper implementation (%T) returned a *Response with a nil Body", rt)
+       }
        if !deadline.IsZero() {
                resp.Body = &cancelTimerBody{
                        stop:          stopTimer,