mirror of https://github.com/golang/go.git
path/filepath: fix Windows-specific Clean bug
Fixes #27791 Change-Id: I762fa663379086c24cb4ddc8233a2c0a82b1238e Reviewed-on: https://go-review.googlesource.com/137055 Run-TryBot: Alex Brainman <alex.brainman@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Alex Brainman <alex.brainman@gmail.com>
This commit is contained in:
parent
1c95d9728a
commit
d1f7470c21
|
|
@ -96,14 +96,19 @@ func Clean(path string) string {
|
|||
}
|
||||
return originalPath + "."
|
||||
}
|
||||
|
||||
n := len(path)
|
||||
if volLen > 2 && n == 1 && os.IsPathSeparator(path[0]) {
|
||||
// UNC volume name with trailing slash.
|
||||
return FromSlash(originalPath[:volLen])
|
||||
}
|
||||
rooted := os.IsPathSeparator(path[0])
|
||||
|
||||
// Invariants:
|
||||
// reading from path; r is index of next byte to process.
|
||||
// writing to buf; w is index of next byte to write.
|
||||
// dotdot is index in buf where .. must stop, either because
|
||||
// writing to out; w is index of next byte to write.
|
||||
// dotdot is index in out where .. must stop, either because
|
||||
// it is the leading slash or it is a leading ../../.. prefix.
|
||||
n := len(path)
|
||||
out := lazybuf{path: path, volAndPath: originalPath, volLen: volLen}
|
||||
r, dotdot := 0, 0
|
||||
if rooted {
|
||||
|
|
|
|||
|
|
@ -92,6 +92,9 @@ var wincleantests = []PathTest{
|
|||
{`//host/share/foo/../baz`, `\\host\share\baz`},
|
||||
{`\\a\b\..\c`, `\\a\b\c`},
|
||||
{`\\a\b`, `\\a\b`},
|
||||
{`\\a\b\`, `\\a\b`},
|
||||
{`\\folder\share\foo`, `\\folder\share\foo`},
|
||||
{`\\folder\share\foo\`, `\\folder\share\foo`},
|
||||
}
|
||||
|
||||
func TestClean(t *testing.T) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue