]> Cypherpunks repositories - gostls13.git/commitdiff
[release-branch.go1.11-security] cmd/go/internal/get: relax pathOK check to allow...
authorBryan C. Mills <bcmills@google.com>
Tue, 4 Dec 2018 22:00:19 +0000 (17:00 -0500)
committerBryan C. Mills <bcmills@google.com>
Fri, 7 Dec 2018 14:48:55 +0000 (14:48 +0000)
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>
src/cmd/go/internal/get/path.go
src/cmd/go/testdata/script/get_unicode.txt [new file with mode: 0644]

index c8072b25fd4c40b94cd36563a8feb3d049db75d0..d443bd28a9656fb86f78e63921d0c6054c4b1f5a 100644 (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.
diff --git a/src/cmd/go/testdata/script/get_unicode.txt b/src/cmd/go/testdata/script/get_unicode.txt
new file mode 100644 (file)
index 0000000..a30802b
--- /dev/null
@@ -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 испытание