From 8f91865e1b2f2df95fb4833babbd0a8fb26085c8 Mon Sep 17 00:00:00 2001 From: Zev Goldstein Date: Fri, 28 Oct 2016 11:42:27 -0400 Subject: [PATCH] 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 --- src/path/filepath/path_test.go | 5 ++++- src/path/filepath/path_windows.go | 6 +++++- 2 files changed, 9 insertions(+), 2 deletions(-) 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 { -- 2.48.1