mirror of https://github.com/spf13/afero.git
mem: Make the File return io.ErrUnexpectedEOF
Instead of panic when reading beyond its borders. This is in line with how the OS File works. Fixes #152
This commit is contained in:
parent
8d919cbe7e
commit
ec3a3111d1
|
@ -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 {
|
||||
|
|
|
@ -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")
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue