diff options
author | Bryan C. Mills <bcmills@google.com> | 2018-12-04 17:00:19 -0500 |
---|---|---|
committer | Bryan C. Mills <bcmills@google.com> | 2018-12-07 14:48:55 +0000 |
commit | d39cd4d6d73ffc8f47c8f3cec7dbe57a4f3f4980 (patch) | |
tree | cf625539b3c01866f539f6d29d984542468931d5 | |
parent | d01ccd8ee871d6eaaaed52851c6ce8b49993f33a (diff) | |
download | go-d39cd4d6d73ffc8f47c8f3cec7dbe57a4f3f4980.tar.gz go-d39cd4d6d73ffc8f47c8f3cec7dbe57a4f3f4980.zip |
[release-branch.go1.11-security] cmd/go/internal/get: relax pathOK check to allow any letter
This fixes a regression of #18660 with the new path checks.
Change-Id: I2dd9adab999e7f810e0e746ad8b75ea9622f56e7
Reviewed-on: https://team-review.git.corp.google.com/c/372706
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
-rw-r--r-- | src/cmd/go/internal/get/path.go | 13 | ||||
-rw-r--r-- | src/cmd/go/testdata/script/get_unicode.txt | 28 |
2 files changed, 35 insertions, 6 deletions
diff --git a/src/cmd/go/internal/get/path.go b/src/cmd/go/internal/get/path.go index c8072b25fd..d443bd28a9 100644 --- a/src/cmd/go/internal/get/path.go +++ b/src/cmd/go/internal/get/path.go @@ -12,10 +12,13 @@ import ( ) // The following functions are copied verbatim from cmd/go/internal/module/module.go, -// with one change to additionally reject Windows short-names. +// with a change to additionally reject Windows short-names, +// and one to accept arbitrary letters (golang.org/issue/29101). // // TODO(bcmills): After the call site for this function is backported, // consolidate this back down to a single copy. +// +// NOTE: DO NOT MERGE THESE UNTIL WE DECIDE ABOUT ARBITRARY LETTERS IN MODULE MODE. // CheckImportPath checks that an import path is valid. func CheckImportPath(path string) error { @@ -120,10 +123,8 @@ func checkElem(elem string, fileName bool) error { } // pathOK reports whether r can appear in an import path element. -// Paths can be ASCII letters, ASCII digits, and limited ASCII punctuation: + - . _ and ~. -// This matches what "go get" has historically recognized in import paths. -// TODO(rsc): We would like to allow Unicode letters, but that requires additional -// care in the safe encoding (see note below). +// +// NOTE: This function DIVERGES from module mode pathOK by accepting Unicode letters. func pathOK(r rune) bool { if r < utf8.RuneSelf { return r == '+' || r == '-' || r == '.' || r == '_' || r == '~' || @@ -131,7 +132,7 @@ func pathOK(r rune) bool { 'A' <= r && r <= 'Z' || 'a' <= r && r <= 'z' } - return false + return unicode.IsLetter(r) } // fileNameOK reports whether r can appear in a file name. diff --git a/src/cmd/go/testdata/script/get_unicode.txt b/src/cmd/go/testdata/script/get_unicode.txt new file mode 100644 index 0000000000..a30802b999 --- /dev/null +++ b/src/cmd/go/testdata/script/get_unicode.txt @@ -0,0 +1,28 @@ +[!exec:git] skip + +cd $WORK/_origin/example.com/unicode +exec git init +exec git add unicode.go +exec git commit -m 'add unicode.go' + +mkdir $GOPATH/src/example.com/unicode +cd $GOPATH/src/example.com/unicode +exec git clone $WORK/_origin/example.com/unicode . + +cd $WORK/_origin/example.com/испытание +exec git init +exec git add испытание.go +exec git commit -m 'add испытание.go' + +mkdir $GOPATH/src/example.com/испытание +cd $GOPATH/src/example.com/испытание +exec git clone $WORK/_origin/example.com/испытание . + +cd $GOPATH +go get -u example.com/unicode + +-- $WORK/_origin/example.com/unicode/unicode.go -- +package unicode +import _ "example.com/испытание" +-- $WORK/_origin/example.com/испытание/испытание.go -- +package испытание |