]> Cypherpunks repositories - gostls13.git/commitdiff
net/http: panic early in do when Client is nil
authorKevin Burke <kevin@burke.dev>
Fri, 24 Jun 2022 20:13:05 +0000 (13:13 -0700)
committerGopher Robot <gobot@golang.org>
Tue, 26 Mar 2024 06:06:11 +0000 (06:06 +0000)
Callers who invoke `*http.Client.Do` with a nil *Client will now panic
at the top of c.Do, instead of panicking when `deadline` attempts to
read `c.Timeout`.

Errors inside of net/http can be difficult to track down because the
caller is often invoking the standard library code via an SDK. This
can mean that there are many places to check when code panics, and
raises the importance of being clear about error messages.

If nil receiver calls panic during the `deadline()` call, callers
may confuse the error with a more common timeout or deadline
misconfiguration, which may lead a caller who passed a nil receiver
(the author, for example) down the wrong rabbit hole, or cause them to
suspect their timeout/deadline logic. It is less common to configure
client.Jar, so the probability of detecting the actual problem, given
the underlying error cause, is higher.

Fixes #53521.

Change-Id: If102d17bed56fdd950da6e87762166fd29724654
Reviewed-on: https://go-review.googlesource.com/c/go/+/413975
Run-TryBot: Emmanuel Odeke <emmanuel@orijtech.com>
Reviewed-by: Damien Neil <dneil@google.com>
Reviewed-by: David Chase <drchase@google.com>
Reviewed-by: Emmanuel Odeke <emmanuel@orijtech.com>
Auto-Submit: Emmanuel Odeke <emmanuel@orijtech.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>

src/net/http/client.go

index b29910ca43a11c9ad238f9e16147a09fe7cdef8a..cbf7c545019b8cdb463359ba4f6e463090d68c45 100644 (file)
@@ -603,6 +603,7 @@ func (c *Client) do(req *Request) (retres *Response, reterr error) {
                        Err: errors.New("http: nil Request.URL"),
                }
        }
+       _ = *c // panic early if c is nil; see go.dev/issue/53521
 
        var (
                deadline      = c.deadline()