summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/spf13/afero
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/spf13/afero')
-rw-r--r--vendor/github.com/spf13/afero/copyOnWriteFs.go2
-rw-r--r--vendor/github.com/spf13/afero/copyOnWriteFs_test.go16
-rw-r--r--vendor/github.com/spf13/afero/mem/file.go3
-rw-r--r--vendor/github.com/spf13/afero/memmap_test.go30
4 files changed, 50 insertions, 1 deletions
diff --git a/vendor/github.com/spf13/afero/copyOnWriteFs.go b/vendor/github.com/spf13/afero/copyOnWriteFs.go
index ed692ae95..f2ebcd226 100644
--- a/vendor/github.com/spf13/afero/copyOnWriteFs.go
+++ b/vendor/github.com/spf13/afero/copyOnWriteFs.go
@@ -80,7 +80,7 @@ func (u *CopyOnWriteFs) Stat(name string) (os.FileInfo, error) {
if e, ok := err.(*os.PathError); ok {
err = e.Err
}
- if err == syscall.ENOENT || err == syscall.ENOTDIR {
+ if err == os.ErrNotExist || err == syscall.ENOENT || err == syscall.ENOTDIR {
return u.base.Stat(name)
}
return nil, origErr
diff --git a/vendor/github.com/spf13/afero/copyOnWriteFs_test.go b/vendor/github.com/spf13/afero/copyOnWriteFs_test.go
index 2a00fab72..c6f2c6d62 100644
--- a/vendor/github.com/spf13/afero/copyOnWriteFs_test.go
+++ b/vendor/github.com/spf13/afero/copyOnWriteFs_test.go
@@ -21,3 +21,19 @@ func TestCopyOnWrite(t *testing.T) {
}
}
+
+func TestCopyOnWriteFileInMemMapBase(t *testing.T) {
+ base := &MemMapFs{}
+ layer := &MemMapFs{}
+
+ if err := WriteFile(base, "base.txt", []byte("base"), 0755); err != nil {
+ t.Fatalf("Failed to write file: %s", err)
+ }
+
+ ufs := NewCopyOnWriteFs(base, layer)
+
+ _, err := ufs.Stat("base.txt")
+ if err != nil {
+ t.Fatal(err)
+ }
+}
diff --git a/vendor/github.com/spf13/afero/mem/file.go b/vendor/github.com/spf13/afero/mem/file.go
index 5401a3b7c..885e55429 100644
--- a/vendor/github.com/spf13/afero/mem/file.go
+++ b/vendor/github.com/spf13/afero/mem/file.go
@@ -176,6 +176,9 @@ func (f *File) Read(b []byte) (n int, err error) {
if len(b) > 0 && int(f.at) == len(f.fileData.data) {
return 0, io.EOF
}
+ if int(f.at) > len(f.fileData.data) {
+ return 0, io.ErrUnexpectedEOF
+ }
if len(f.fileData.data)-int(f.at) >= len(b) {
n = len(b)
} else {
diff --git a/vendor/github.com/spf13/afero/memmap_test.go b/vendor/github.com/spf13/afero/memmap_test.go
index 09d8680f6..47414ab14 100644
--- a/vendor/github.com/spf13/afero/memmap_test.go
+++ b/vendor/github.com/spf13/afero/memmap_test.go
@@ -2,6 +2,7 @@ package afero
import (
"fmt"
+ "io"
"os"
"path/filepath"
"runtime"
@@ -419,3 +420,32 @@ func TestMemFsDirMode(t *testing.T) {
t.Error("FileMode is not directory")
}
}
+
+func TestMemFsUnexpectedEOF(t *testing.T) {
+ t.Parallel()
+
+ fs := NewMemMapFs()
+
+ if err := WriteFile(fs, "file.txt", []byte("abc"), 0777); err != nil {
+ t.Fatal(err)
+ }
+
+ f, err := fs.Open("file.txt")
+ if err != nil {
+ t.Fatal(err)
+ }
+ defer f.Close()
+
+ // Seek beyond the end.
+ _, err = f.Seek(512, 0)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ buff := make([]byte, 256)
+ _, err = io.ReadAtLeast(f, buff, 256)
+
+ if err != io.ErrUnexpectedEOF {
+ t.Fatal("Expected ErrUnexpectedEOF")
+ }
+}