diff options
| author | Bryan C. Mills <bcmills@google.com> | 2020-03-02 10:16:39 -0500 |
|---|---|---|
| committer | Bryan C. Mills <bcmills@google.com> | 2020-03-02 15:39:23 +0000 |
| commit | 12d02e7d8e7df75ccbf07ec40028329fcc35c55b (patch) | |
| tree | dcb8b6aa910b6776f1adb46efa9766b341f5f0c3 /src | |
| parent | acac535c3ca571beeb168c953d6d672f61387ef1 (diff) | |
| download | go-12d02e7d8e7df75ccbf07ec40028329fcc35c55b.tar.xz | |
net/http: verify RoundTripper invariants in the send function
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>
Diffstat (limited to 'src')
| -rw-r--r-- | src/net/http/client.go | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/src/net/http/client.go b/src/net/http/client.go index a496f1c0c7..ec24516833 100644 --- a/src/net/http/client.go +++ b/src/net/http/client.go @@ -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, |
