diff --git a/memfs/memory.go b/memfs/memory.go index 2641238..c008702 100644 --- a/memfs/memory.go +++ b/memfs/memory.go @@ -59,6 +59,9 @@ func (fs *Memory) OpenFile(filename string, flag int, perm os.FileMode) (billy.F } if target, isLink := fs.resolveLink(filename, f); isLink { + if target == filename { + return nil, os.ErrNotExist + } return fs.OpenFile(target, flag, perm) } } diff --git a/memfs/memory_test.go b/memfs/memory_test.go index 030c58a..043a9fb 100644 --- a/memfs/memory_test.go +++ b/memfs/memory_test.go @@ -121,3 +121,9 @@ func (s *MemorySuite) TestTruncateAppend(c *C) { c.Assert(err, IsNil) c.Assert(string(data), Equals, "replace") } + +func (s *MemorySuite) TestSymlink(c *C) { + s.FS.Symlink("test", "test") + _, err := s.FS.Open("test") + c.Assert(err, NotNil) +}