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 + "."
|
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])
|
rooted := os.IsPathSeparator(path[0])
|
||||||
|
|
||||||
// Invariants:
|
// Invariants:
|
||||||
// reading from path; r is index of next byte to process.
|
// reading from path; r is index of next byte to process.
|
||||||
// writing to buf; w is index of next byte to write.
|
// writing to out; w is index of next byte to write.
|
||||||
// dotdot is index in buf where .. must stop, either because
|
// dotdot is index in out where .. must stop, either because
|
||||||
// it is the leading slash or it is a leading ../../.. prefix.
|
// it is the leading slash or it is a leading ../../.. prefix.
|
||||||
n := len(path)
|
|
||||||
out := lazybuf{path: path, volAndPath: originalPath, volLen: volLen}
|
out := lazybuf{path: path, volAndPath: originalPath, volLen: volLen}
|
||||||
r, dotdot := 0, 0
|
r, dotdot := 0, 0
|
||||||
if rooted {
|
if rooted {
|
||||||
|
|
|
||||||
|
|
@ -92,6 +92,9 @@ var wincleantests = []PathTest{
|
||||||
{`//host/share/foo/../baz`, `\\host\share\baz`},
|
{`//host/share/foo/../baz`, `\\host\share\baz`},
|
||||||
{`\\a\b\..\c`, `\\a\b\c`},
|
{`\\a\b\..\c`, `\\a\b\c`},
|
||||||
{`\\a\b`, `\\a\b`},
|
{`\\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) {
|
func TestClean(t *testing.T) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue