diff --git a/src/net/http/fs.go b/src/net/http/fs.go index 773e74d536..2858319450 100644 --- a/src/net/http/fs.go +++ b/src/net/http/fs.go @@ -43,6 +43,9 @@ func mapDirOpenError(originalErr error, name string) error { parts := strings.Split(name, string(filepath.Separator)) for i := range parts { + if parts[i] == "" { + continue + } fi, err := os.Stat(strings.Join(parts[:i+1], string(filepath.Separator))) if err != nil { return originalErr diff --git a/src/net/http/fs_test.go b/src/net/http/fs_test.go index 8ff2faf9b9..1de1cd53d0 100644 --- a/src/net/http/fs_test.go +++ b/src/net/http/fs_test.go @@ -1176,22 +1176,33 @@ func TestFileServerNotDirError(t *testing.T) { t.Errorf("StatusCode = %v; want 404", res.StatusCode) } - dir := Dir("testdata") - _, err = dir.Open("/index.html/not-a-file") - if err == nil { - t.Fatal("err == nil; want != nil") - } - if !os.IsNotExist(err) { - t.Errorf("err = %v; os.IsNotExist(err) = %v; want true", err, os.IsNotExist(err)) + test := func(name string, dir Dir) { + t.Run(name, func(t *testing.T) { + _, err = dir.Open("/index.html/not-a-file") + if err == nil { + t.Fatal("err == nil; want != nil") + } + if !os.IsNotExist(err) { + t.Errorf("err = %v; os.IsNotExist(err) = %v; want true", err, os.IsNotExist(err)) + } + + _, err = dir.Open("/index.html/not-a-dir/not-a-file") + if err == nil { + t.Fatal("err == nil; want != nil") + } + if !os.IsNotExist(err) { + t.Errorf("err = %v; os.IsNotExist(err) = %v; want true", err, os.IsNotExist(err)) + } + }) } - _, err = dir.Open("/index.html/not-a-dir/not-a-file") - if err == nil { - t.Fatal("err == nil; want != nil") - } - if !os.IsNotExist(err) { - t.Errorf("err = %v; os.IsNotExist(err) = %v; want true", err, os.IsNotExist(err)) + absPath, err := filepath.Abs("testdata") + if err != nil { + t.Fatal("get abs path:", err) } + + test("RelativePath", Dir("testdata")) + test("AbsolutePath", Dir(absPath)) } func TestFileServerCleanPath(t *testing.T) {