mirror of https://github.com/golang/go.git
cmd/go/internal/get: reject Windows shortnames as path components
Updates #29230 Change-Id: Ia32d8ec1fc0c4e242f50d8871c0ef3ce315f3c65 Reviewed-on: https://team-review.git.corp.google.com/c/370571 Reviewed-by: Russ Cox <rsc@google.com> Reviewed-on: https://go-review.googlesource.com/c/154102 Reviewed-by: Bryan C. Mills <bcmills@google.com>
This commit is contained in:
parent
bc82d7c7db
commit
4ab6fb1945
|
|
@ -11,7 +11,8 @@ import (
|
||||||
"unicode/utf8"
|
"unicode/utf8"
|
||||||
)
|
)
|
||||||
|
|
||||||
// The following functions are copied verbatim from cmd/go/internal/module/module.go.
|
// The following functions are copied verbatim from cmd/go/internal/module/module.go,
|
||||||
|
// with one change to additionally reject Windows short-names.
|
||||||
//
|
//
|
||||||
// TODO(bcmills): After the call site for this function is backported,
|
// TODO(bcmills): After the call site for this function is backported,
|
||||||
// consolidate this back down to a single copy.
|
// consolidate this back down to a single copy.
|
||||||
|
|
@ -76,6 +77,7 @@ func checkElem(elem string, fileName bool) error {
|
||||||
if elem[len(elem)-1] == '.' {
|
if elem[len(elem)-1] == '.' {
|
||||||
return fmt.Errorf("trailing dot in path element")
|
return fmt.Errorf("trailing dot in path element")
|
||||||
}
|
}
|
||||||
|
|
||||||
charOK := pathOK
|
charOK := pathOK
|
||||||
if fileName {
|
if fileName {
|
||||||
charOK = fileNameOK
|
charOK = fileNameOK
|
||||||
|
|
@ -97,6 +99,23 @@ func checkElem(elem string, fileName bool) error {
|
||||||
return fmt.Errorf("disallowed path element %q", elem)
|
return fmt.Errorf("disallowed path element %q", elem)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Reject path components that look like Windows short-names.
|
||||||
|
// Those usually end in a tilde followed by one or more ASCII digits.
|
||||||
|
if tilde := strings.LastIndexByte(short, '~'); tilde >= 0 && tilde < len(short)-1 {
|
||||||
|
suffix := short[tilde+1:]
|
||||||
|
suffixIsDigits := true
|
||||||
|
for _, r := range suffix {
|
||||||
|
if r < '0' || r > '9' {
|
||||||
|
suffixIsDigits = false
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if suffixIsDigits {
|
||||||
|
return fmt.Errorf("trailing tilde and digits in path element")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,21 @@
|
||||||
|
# Paths containing windows short names should be rejected before attempting to fetch.
|
||||||
|
! go get example.com/longna~1.dir/thing
|
||||||
|
stderr 'trailing tilde and digits'
|
||||||
|
! go get example.com/longna~1/thing
|
||||||
|
stderr 'trailing tilde and digits'
|
||||||
|
! go get example.com/~9999999/thing
|
||||||
|
stderr 'trailing tilde and digits'
|
||||||
|
|
||||||
|
# A path containing an element that is just a tilde, or a tilde followed by non-digits,
|
||||||
|
# should attempt to resolve.
|
||||||
|
! go get example.com/~glenda/notfound
|
||||||
|
! stderr 'trailing tilde and digits'
|
||||||
|
stderr 'unrecognized import path'
|
||||||
|
|
||||||
|
! go get example.com/~glenda2/notfound
|
||||||
|
! stderr 'trailing tilde and digits'
|
||||||
|
stderr 'unrecognized import path'
|
||||||
|
|
||||||
|
! go get example.com/~/notfound
|
||||||
|
! stderr 'trailing tilde and digits'
|
||||||
|
stderr 'unrecognized import path'
|
||||||
Loading…
Reference in New Issue