]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go/internal/modfetch: workaround file URL parsing on Windows
authorJay Conrod <jayconrod@google.com>
Thu, 25 Apr 2019 15:59:32 +0000 (11:59 -0400)
committerJay Conrod <jayconrod@google.com>
Thu, 25 Apr 2019 16:32:34 +0000 (16:32 +0000)
Remove the leading slash from GOPROXY file:// URLs.

Updates #31675

Change-Id: Id45af2a806afc3c216181c13f6bc73713b925693
Reviewed-on: https://go-review.googlesource.com/c/go/+/173499
Run-TryBot: Jay Conrod <jayconrod@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Cottrell <iancottrell@google.com>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/cmd/go/internal/modfetch/proxy.go

index aa1778296f06e39cdd9f8a1d0db1f7d1d492d329..2d661a0f755128f0b86aa1ce341a0df509345e73 100644 (file)
@@ -14,9 +14,11 @@ import (
        "os"
        pathpkg "path"
        "path/filepath"
+       "runtime"
        "strings"
        "sync"
        "time"
+       "unicode"
 
        "cmd/go/internal/base"
        "cmd/go/internal/cfg"
@@ -219,6 +221,11 @@ func (p *proxyRepo) getBody(path string) (io.ReadCloser, error) {
                if err != nil {
                        return nil, err
                }
+               if runtime.GOOS == "windows" && len(rawPath) >= 4 && rawPath[0] == '/' && unicode.IsLetter(rune(rawPath[1])) && rawPath[2] == ':' {
+                       // On Windows, file URLs look like "file:///C:/foo/bar". url.Path will
+                       // start with a slash which must be removed. See golang.org/issue/6027.
+                       rawPath = rawPath[1:]
+               }
                return os.Open(filepath.FromSlash(rawPath))
        }