aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBryan C. Mills <bcmills@google.com>2020-03-02 10:16:39 -0500
committerBryan C. Mills <bcmills@google.com>2020-03-02 15:39:23 +0000
commit12d02e7d8e7df75ccbf07ec40028329fcc35c55b (patch)
treedcb8b6aa910b6776f1adb46efa9766b341f5f0c3 /src
parentacac535c3ca571beeb168c953d6d672f61387ef1 (diff)
downloadgo-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.go6
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,