]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go/internal/web: improve IP check testing on ipv6 env
authorJinwen Wo <wojinwen@huawei.com>
Thu, 7 Oct 2021 17:24:47 +0000 (17:24 +0000)
committerBryan C. Mills <bcmills@google.com>
Thu, 7 Oct 2021 19:56:19 +0000 (19:56 +0000)
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 <bcmills@google.com>
Reviewed-by: Jay Conrod <jayconrod@google.com>
Run-TryBot: Bryan C. Mills <bcmills@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Trust: Jay Conrod <jayconrod@google.com>

src/cmd/go/internal/web/http.go

index f177278eba1e7d9088014ee0ae246e2efb0dca39..81f841d2c6d5bd76024403f636fe4aafaaf1b99c 100644 (file)
@@ -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) {