From 88f3a6cd47a375e39b08e0a61e22d773e6c21842 Mon Sep 17 00:00:00 2001 From: Alberto Donato Date: Thu, 11 Jan 2024 10:47:32 +0100 Subject: [PATCH] test revert --- server/filesystem.go | 26 ++++++++++++-------------- server/filesystem_test.go | 4 ++-- server/server_test.go | 2 +- testhelpers/tempdir.go | 3 ++- 4 files changed, 17 insertions(+), 18 deletions(-) diff --git a/server/filesystem.go b/server/filesystem.go index 3356568..d8499b0 100644 --- a/server/filesystem.go +++ b/server/filesystem.go @@ -71,20 +71,18 @@ func (fs FileSystem) newFile(name string) (*File, error) { return nil, err } if !fs.AllowOutsideSymlinks { - target, err := filepath.EvalSymlinks(absPath) - if err != nil { - return nil, err - } - path, err := filepath.Abs(target) - if err != nil { - return nil, err - } - root, err := filepath.Abs(fs.Root) - if err != nil { - return nil, err - } - if !strings.HasPrefix(path, root) { - return nil, os.ErrPermission + if target, _ := os.Readlink(absPath); target != "" { + path, err := filepath.Abs(target) + if err != nil { + return nil, err + } + root, err := filepath.Abs(fs.Root) + if err != nil { + return nil, err + } + if !strings.HasPrefix(path, root) { + return nil, os.ErrPermission + } } } return NewFile(absPath, fs.HideDotFiles) diff --git a/server/filesystem_test.go b/server/filesystem_test.go index 4932ab9..e0a33fd 100644 --- a/server/filesystem_test.go +++ b/server/filesystem_test.go @@ -102,7 +102,7 @@ func (s *FileSystemTestSuite) TestNoLookupWithHTMLSuffix() { func (s *FileSystemTestSuite) TestNoOutsideSymlink() { s.WriteFile("foo", "content") root := s.Mkdir("root") - s.Symlink("../foo", "root/foo-link") + s.Symlink("foo", "root/foo-link") fs := server.FileSystem{Root: root} file, err := fs.Open("/foo-link") s.IsType(os.ErrPermission, err) @@ -113,7 +113,7 @@ func (s *FileSystemTestSuite) TestNoOutsideSymlink() { func (s *FileSystemTestSuite) TestOutsideSymlinks() { s.WriteFile("foo", "content") root := s.Mkdir("root") - s.Symlink("../foo", "root/foo-link") + s.Symlink("foo", "root/foo-link") fs := server.FileSystem{Root: root, AllowOutsideSymlinks: true} file, err := fs.Open("/foo-link") s.Nil(err) diff --git a/server/server_test.go b/server/server_test.go index 2a496d4..a44d1d3 100644 --- a/server/server_test.go +++ b/server/server_test.go @@ -186,7 +186,7 @@ func (s *StaticServerTestSuite) TestSetupServerSpecifyAllowOutsideSymlinks() { content := "some content" s.WriteFile("outside.txt", content) subdir := s.Mkdir("sub") - s.Symlink("../outside.txt", "sub/test.txt") + s.Symlink("outside.txt", "sub/test.txt") serv, err := server.NewStaticServer(server.StaticServerConfig{ Dir: subdir, AllowOutsideSymlinks: true, diff --git a/testhelpers/tempdir.go b/testhelpers/tempdir.go index c9c66f3..2bc2044 100644 --- a/testhelpers/tempdir.go +++ b/testhelpers/tempdir.go @@ -55,8 +55,9 @@ func (s *TempDirTestSuite) Mkdir(name string) string { // Symlink creates a symbolic link to oldname returning the absolute path of // the new name. Both paths are relative to the tempdir path. func (s *TempDirTestSuite) Symlink(oldname, newname string) string { + oldPath := s.absPath(oldname) newPath := s.absPath(newname) - err := os.Symlink(oldname, newPath) + err := os.Symlink(oldPath, newPath) s.Nil(err) return newPath }