Skip to content

Commit

Permalink
cmd/go/internal/get: relax pathOK check to allow any letter
Browse files Browse the repository at this point in the history
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 <[email protected]>
Reviewed-on: https://go-review.googlesource.com/c/154104
Reviewed-by: Bryan C. Mills <[email protected]>
  • Loading branch information
Bryan C. Mills authored and dmitshur committed Dec 14, 2018
1 parent 73e862e commit 9c075b7
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 6 deletions.
13 changes: 7 additions & 6 deletions src/cmd/go/internal/get/path.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -120,18 +123,16 @@ 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 == '~' ||
'0' <= r && r <= '9' ||
'A' <= r && r <= 'Z' ||
'a' <= r && r <= 'z'
}
return false
return unicode.IsLetter(r)
}

// fileNameOK reports whether r can appear in a file name.
Expand Down
28 changes: 28 additions & 0 deletions src/cmd/go/testdata/script/get_unicode.txt
Original file line number Diff line number Diff line change
@@ -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 испытание

0 comments on commit 9c075b7

Please sign in to comment.