internal/http3: handle a nil TLSConfig in newQUICConfig

newQUICConfig read tlsConfig.NextProtos before checking tlsConfig for nil, so
a nil tls.Config panicked. The nil check that followed, after tlsConfig.Clone(),
was unreachable.

This is reachable from initEndpoint, which passes http.Transport.TLSClientConfig
straight through, and that field is nil for a default Transport:

    panic: runtime error: invalid memory address or nil pointer dereference
        golang.org/x/net/internal/http3.newQUICConfig(...)
        golang.org/x/net/internal/http3.(*transport).initEndpoint(...)

Change-Id: I8b8dcb56a2ffc148a03894335f9d74196a6a6964
Reviewed-on: https://go-review.googlesource.com/c/net/+/823105
LUCI-TryBot-Result: golang-scoped@luci-project-accounts.iam.gserviceaccount.com <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Nicholas Husin <nsh@golang.org>
Reviewed-by: David Chase <drchase@google.com>
Reviewed-by: Nicholas Husin <husin@google.com>
3 files changed
tree: 6e636031b31447534dc4926058de96d3bb812cb5
  1. bpf/
  2. context/
  3. dict/
  4. dns/
  5. html/
  6. http/
  7. http2/
  8. http3/
  9. icmp/
  10. idna/
  11. internal/
  12. ipv4/
  13. ipv6/
  14. lif/
  15. nettest/
  16. netutil/
  17. proxy/
  18. publicsuffix/
  19. quic/
  20. route/
  21. trace/
  22. webdav/
  23. websocket/
  24. xsrftoken/
  25. .gitattributes
  26. .gitignore
  27. codereview.cfg
  28. CONTRIBUTING.md
  29. go.mod
  30. go.sum
  31. LICENSE
  32. PATENTS
  33. README.md
README.md

Go Networking

Go Reference

This repository holds supplementary Go networking packages.

Report Issues / Send Patches

This repository uses Gerrit for code changes. To learn how to submit changes to this repository, see https://go.dev/doc/contribute.

The git repository is https://go.googlesource.com/net.

The main issue tracker for the net repository is located at https://go.dev/issues. Prefix your issue with “x/net:” in the subject line, so it is easy to find.