From 991b95a9f96f97636555cf27b346ff453f580003 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Thu, 31 May 2018 11:43:57 +0200 Subject: [PATCH] Return error in Readdir on regular mem file Fixes #169 --- afero_test.go | 19 +++++++++++++++++++ mem/file.go | 3 +++ 2 files changed, 22 insertions(+) diff --git a/afero_test.go b/afero_test.go index 526afa97..e2c13624 100644 --- a/afero_test.go +++ b/afero_test.go @@ -570,6 +570,25 @@ func TestReaddir(t *testing.T) { } } +// https://github.com/spf13/afero/issues/169 +func TestReaddirRegularFile(t *testing.T) { + defer removeAllTestFiles(t) + for _, fs := range Fss { + f := tmpFile(fs) + defer f.Close() + + _, err := f.Readdirnames(-1) + if err == nil { + t.Fatal("Expected error") + } + + _, err = f.Readdir(-1) + if err == nil { + t.Fatal("Expected error") + } + } +} + type myFileInfo []os.FileInfo func (m myFileInfo) String() string { diff --git a/mem/file.go b/mem/file.go index 885e5542..7af2fb56 100644 --- a/mem/file.go +++ b/mem/file.go @@ -131,6 +131,9 @@ func (f *File) Sync() error { } func (f *File) Readdir(count int) (res []os.FileInfo, err error) { + if !f.fileData.dir { + return nil, &os.PathError{Op: "readdir", Path: f.fileData.name, Err: errors.New("not a dir")} + } var outLength int64 f.fileData.Lock()