]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go: allow GOPROXY to elide the "https://" prefix
authorBryan C. Mills <bcmills@google.com>
Thu, 6 Jun 2019 18:43:28 +0000 (14:43 -0400)
committerBryan C. Mills <bcmills@google.com>
Tue, 11 Jun 2019 19:43:04 +0000 (19:43 +0000)
Fixes #32191

Change-Id: I6eebe1d4975e904c906e6b839cd6cab9447cbb34
Reviewed-on: https://go-review.googlesource.com/c/go/+/181019
Run-TryBot: Bryan C. Mills <bcmills@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Russ Cox <rsc@golang.org>
src/cmd/go/internal/modfetch/proxy.go
src/cmd/go/internal/modfetch/sumdb.go
src/cmd/go/testdata/script/mod_proxy_https.txt [new file with mode: 0644]

index 50e26625a1023ac49a2b8c9948e11208073d2829..ce74e826e1bccfca1e5bf9af2c1030ae4e3e613e 100644 (file)
@@ -12,7 +12,9 @@ import (
        "io/ioutil"
        "net/url"
        "os"
+       "path"
        pathpkg "path"
+       "path/filepath"
        "strings"
        "sync"
        "time"
@@ -110,6 +112,13 @@ func proxyURLs() ([]string, error) {
                                break
                        }
 
+                       // Single-word tokens are reserved for built-in behaviors, and anything
+                       // containing the string ":/" or matching an absolute file path must be a
+                       // complete URL. For all other paths, implicitly add "https://".
+                       if strings.ContainsAny(proxyURL, ".:/") && !strings.Contains(proxyURL, ":/") && !filepath.IsAbs(proxyURL) && !path.IsAbs(proxyURL) {
+                               proxyURL = "https://" + proxyURL
+                       }
+
                        // Check that newProxyRepo accepts the URL.
                        // It won't do anything with the path.
                        _, err := newProxyRepo(proxyURL, "golang.org/x/text")
index 965898fbf5fdf5bfc1d03986099ce559cc0016d5..66a09d32c273dba6952ce2d3ec2e61df9abc377e 100644 (file)
@@ -145,7 +145,7 @@ func (c *dbClient) initBase() {
                if proxyURL == "noproxy" {
                        continue
                }
-               if proxyURL == "direct" {
+               if proxyURL == "direct" || proxyURL == "off" {
                        break
                }
                proxy, err := url.Parse(proxyURL)
diff --git a/src/cmd/go/testdata/script/mod_proxy_https.txt b/src/cmd/go/testdata/script/mod_proxy_https.txt
new file mode 100644 (file)
index 0000000..a23090c
--- /dev/null
@@ -0,0 +1,19 @@
+env GO111MODULE=on
+
+# GOPROXY file paths must provide the "file://" prefix explicitly.
+env GOPROXY=$WORK/proxydir
+! go list -versions -m golang.org/x/text
+stderr 'invalid proxy URL.*proxydir'
+
+[!net] stop
+
+# GOPROXY HTTPS paths may elide the "https://" prefix.
+# (See golang.org/issue/32191.)
+env GOPROXY=proxy.golang.org
+go list -versions -m golang.org/x/text
+
+-- go.mod --
+module example.com
+go 1.13
+-- $WORK/proxydir/README.md --
+This proxy contains no data.