From: Jinwen Wo Date: Thu, 7 Oct 2021 17:24:47 +0000 (+0000) Subject: cmd/go/internal/web: improve IP check testing on ipv6 env X-Git-Tag: go1.18beta1~987 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=4ab3c1065eb38b90247f7ad46160fc5bb07ca2ed;p=gostls13.git cmd/go/internal/web: improve IP check testing on ipv6 env The existing implementation lacks consideration of running test on a machine which has ipv6 address but no ipv4 address. Use net.IP.IsLoopback and net.IP.IsUnspecified instead of hardcoded addresses. Fixes: #48575 This PR will be imported into Gerrit with the title and first comment (this text) used to generate the subject and body of the Gerrit change. Change-Id: I9c3c26d2ba13c7a24065751b59a1e002098ed654 GitHub-Last-Rev: fc45adbf7b944122d8f07bd451a8eeed1e69140c GitHub-Pull-Request: golang/go#48850 Reviewed-on: https://go-review.googlesource.com/c/go/+/354609 Reviewed-by: Bryan C. Mills Reviewed-by: Jay Conrod Run-TryBot: Bryan C. Mills TryBot-Result: Go Bot Trust: Jay Conrod --- diff --git a/src/cmd/go/internal/web/http.go b/src/cmd/go/internal/web/http.go index f177278eba..81f841d2c6 100644 --- a/src/cmd/go/internal/web/http.go +++ b/src/cmd/go/internal/web/http.go @@ -17,6 +17,7 @@ import ( "errors" "fmt" "mime" + "net" "net/http" urlpkg "net/url" "os" @@ -84,8 +85,15 @@ func get(security SecurityMode, url *urlpkg.URL) (*Response, error) { if url.Host == "localhost.localdev" { return nil, fmt.Errorf("no such host localhost.localdev") } - if os.Getenv("TESTGONETWORK") == "panic" && !strings.HasPrefix(url.Host, "127.0.0.1") && !strings.HasPrefix(url.Host, "0.0.0.0") { - panic("use of network: " + url.String()) + if os.Getenv("TESTGONETWORK") == "panic" { + host := url.Host + if h, _, err := net.SplitHostPort(url.Host); err == nil && h != "" { + host = h + } + addr := net.ParseIP(host) + if addr == nil || (!addr.IsLoopback() && !addr.IsUnspecified()) { + panic("use of network: " + url.String()) + } } fetch := func(url *urlpkg.URL) (*urlpkg.URL, *http.Response, error) {