Commit c55fb336 authored by Ian Lance Taylor's avatar Ian Lance Taylor

[release-branch.go1.12] path/filepath: revert "fix Windows-specific Clean bug"

Revert CL 137055, which changed Clean("\\somepath\dir\") to return
"\\somepath\dir" on Windows. It's not entirely clear this is correct,
as this path is really "\\server\share\", and as such the trailing
slash may be the path on that share, much like "C:\". In any case, the
change broke existing code, so roll it back for now and rethink for 1.13.

Updates #27791
Updates #30307

Change-Id: I69200b1efe38bdb6d452b744582a2bfbb3acbcec
Reviewed-on: https://go-review.googlesource.com/c/163077Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
Reviewed-by: default avatarEmmanuel Odeke <emm.odeke@gmail.com>
(cherry picked from commit 153c0da8)
Reviewed-on: https://go-review.googlesource.com/c/163078
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
parent 4754cba6
...@@ -96,19 +96,14 @@ func Clean(path string) string { ...@@ -96,19 +96,14 @@ 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 out; w is index of next byte to write. // writing to buf; w is index of next byte to write.
// dotdot is index in out where .. must stop, either because // dotdot is index in buf 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 {
......
...@@ -93,9 +93,6 @@ var wincleantests = []PathTest{ ...@@ -93,9 +93,6 @@ 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) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment