]> Cypherpunks repositories - gostls13.git/commitdiff
path/filepath: fix Abs on Windows
authorZev Goldstein <zev.goldstein@gmail.com>
Fri, 28 Oct 2016 15:42:27 +0000 (11:42 -0400)
committerBrad Fitzpatrick <bradfitz@golang.org>
Sat, 29 Oct 2016 16:44:45 +0000 (16:44 +0000)
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 <alex.brainman@gmail.com>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Alex Brainman <alex.brainman@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/path/filepath/path_test.go
src/path/filepath/path_windows.go

index 94f9c014598f4ccced1c63543110f69c411a67e0..921b23842b458d732304103abe7f5d3e345e2d8c 100644 (file)
@@ -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)
                }
        }
index a74b6469a915584857c910212f96f1b7bd7cbaa4..359703de2695390da242f154a74e21f892f078e0 100644 (file)
@@ -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 {