From: Zev Goldstein Date: Fri, 28 Oct 2016 15:42:27 +0000 (-0400) Subject: path/filepath: fix Abs on Windows X-Git-Tag: go1.8beta1~465 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=8f91865e1b2f2df95fb4833babbd0a8fb26085c8;p=gostls13.git path/filepath: fix Abs on Windows The filepath.Abs function in windows did not call Clean as the documentation claimed. This change not only fixes that behavior but also adjusts TestAbs to verify Abs calls Clean as documented. Fixes #17210 Change-Id: I20c5f5026042fd7bd9d929ff5b17c8b2653f8afe Reviewed-on: https://go-review.googlesource.com/32292 Reviewed-by: Alex Brainman Reviewed-by: Brad Fitzpatrick Run-TryBot: Alex Brainman TryBot-Result: Gobot Gobot --- diff --git a/src/path/filepath/path_test.go b/src/path/filepath/path_test.go index 94f9c01459..921b23842b 100644 --- a/src/path/filepath/path_test.go +++ b/src/path/filepath/path_test.go @@ -1061,13 +1061,16 @@ var absTestDirs = []string{ var absTests = []string{ ".", "b", + "b/", "../a", "../a/b", "../a/b/./c/../../.././a", + "../a/b/./c/../../.././a/", "$", "$/.", "$/a/../a/b", "$/a/b/c/../../.././a", + "$/a/b/c/../../.././a/", } func TestAbs(t *testing.T) { @@ -1132,7 +1135,7 @@ func TestAbs(t *testing.T) { if !filepath.IsAbs(abspath) { t.Errorf("Abs(%q)=%q, not an absolute path", path, abspath) } - if filepath.IsAbs(path) && abspath != filepath.Clean(path) { + if filepath.IsAbs(abspath) && abspath != filepath.Clean(abspath) { t.Errorf("Abs(%q)=%q, isn't clean", path, abspath) } } diff --git a/src/path/filepath/path_windows.go b/src/path/filepath/path_windows.go index a74b6469a9..359703de26 100644 --- a/src/path/filepath/path_windows.go +++ b/src/path/filepath/path_windows.go @@ -106,7 +106,11 @@ func splitList(path string) []string { } func abs(path string) (string, error) { - return syscall.FullPath(path) + fullPath, err := syscall.FullPath(path) + if err != nil { + return "", err + } + return Clean(fullPath), nil } func join(elem []string) string {