mirror of
https://github.com/golang/go
synced 2024-11-16 20:14:48 -07:00
Revert "path/filepath: change IsAbs("NUL") to return true"
This reverts commit d154ef60a0
.
This change made IsAbs return true for certain reserved filenames,
but does not consistently detect reserved names. For example,
"./COM1", "//./COM1", and (on some Windows versions) "COM1.txt"
all refer to the COM1 device, but IsAbs detects none of them.
Since NUL is not an absolute path, do not attempt to detect it
or other device paths in IsAbs. See #56217 for more discussion
of IsAbs and device paths.
For #56217.
Change-Id: If4bf81c7e1a2e8842206c7c5268555102140dae8
Reviewed-on: https://go-review.googlesource.com/c/go/+/448898
Reviewed-by: Michael Knyszek <mknyszek@google.com>
Run-TryBot: Damien Neil <dneil@google.com>
Reviewed-by: Quim Muntal <quimmuntal@gmail.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Rob Pike <r@golang.org>
This commit is contained in:
parent
61c57575cd
commit
739618945e
@ -897,11 +897,6 @@ func TestIsAbs(t *testing.T) {
|
||||
for _, test := range isabstests {
|
||||
tests = append(tests, IsAbsTest{"c:" + test.path, test.isAbs})
|
||||
}
|
||||
// Test reserved names.
|
||||
tests = append(tests, IsAbsTest{os.DevNull, true})
|
||||
tests = append(tests, IsAbsTest{"NUL", true})
|
||||
tests = append(tests, IsAbsTest{"nul", true})
|
||||
tests = append(tests, IsAbsTest{"CON", true})
|
||||
} else {
|
||||
tests = isabstests
|
||||
}
|
||||
|
@ -20,26 +20,8 @@ func toUpper(c byte) byte {
|
||||
return c
|
||||
}
|
||||
|
||||
// isReservedName returns true if path is a Windows reserved name.
|
||||
func isReservedName(path string) bool {
|
||||
// For details, search for PRN in
|
||||
// https://docs.microsoft.com/en-us/windows/desktop/fileio/naming-a-file.
|
||||
if 3 <= len(path) && len(path) <= 4 {
|
||||
switch string([]byte{toUpper(path[0]), toUpper(path[1]), toUpper(path[2])}) {
|
||||
case "CON", "PRN", "AUX", "NUL":
|
||||
return len(path) == 3
|
||||
case "COM", "LPT":
|
||||
return len(path) == 4 && '1' <= path[3] && path[3] <= '9'
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// IsAbs reports whether the path is absolute.
|
||||
func IsAbs(path string) (b bool) {
|
||||
if isReservedName(path) {
|
||||
return true
|
||||
}
|
||||
l := volumeNameLen(path)
|
||||
if l == 0 {
|
||||
return false
|
||||
|
Loading…
Reference in New Issue
Block a user