cmd/go/internal/get: relax pathOK check to allow any letter

This fixes a regression of #18660 with the new path checks.

Updates #29230

Change-Id: I2dd9adab999e7f810e0e746ad8b75ea9622f56e7
Reviewed-on: https://team-review.git.corp.google.com/c/370578
Reviewed-by: Russ Cox <rsc@google.com>
Reviewed-on: https://go-review.googlesource.com/c/154104
Reviewed-by: Bryan C. Mills <bcmills@google.com>
This commit is contained in:
Bryan C. Mills 2018-12-04 17:00:19 -05:00 committed by Dmitri Shuralyov
parent 73e862eced
commit 9c075b7c71
2 changed files with 35 additions and 6 deletions

View file

@ -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.

View file

@ -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 испытание