mirror of
https://github.com/golang/go
synced 2024-11-25 10:07:56 -07:00
os: do not interpret 0-length read as EOF
Fixes #2402. R=golang-dev, bradfitz, r CC=golang-dev https://golang.org/cl/5298081
This commit is contained in:
parent
9db3f78c39
commit
4853c51770
@ -69,7 +69,7 @@ func (file *File) Read(b []byte) (n int, err Error) {
|
|||||||
if n < 0 {
|
if n < 0 {
|
||||||
n = 0
|
n = 0
|
||||||
}
|
}
|
||||||
if n == 0 && !iserror(e) {
|
if n == 0 && len(b) > 0 && !iserror(e) {
|
||||||
return 0, EOF
|
return 0, EOF
|
||||||
}
|
}
|
||||||
if iserror(e) {
|
if iserror(e) {
|
||||||
|
@ -165,6 +165,27 @@ func TestLstat(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Read with length 0 should not return EOF.
|
||||||
|
func TestRead0(t *testing.T) {
|
||||||
|
path := sfdir + "/" + sfname
|
||||||
|
f, err := Open(path)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal("open failed:", err)
|
||||||
|
}
|
||||||
|
defer f.Close()
|
||||||
|
|
||||||
|
b := make([]byte, 0)
|
||||||
|
n, err := f.Read(b)
|
||||||
|
if n != 0 || err != nil {
|
||||||
|
t.Errorf("Read(0) = %d, %v, want 0, nil", n, err)
|
||||||
|
}
|
||||||
|
b = make([]byte, 100)
|
||||||
|
n, err = f.Read(b)
|
||||||
|
if n <= 0 || err != nil {
|
||||||
|
t.Errorf("Read(100) = %d, %v, want >0, nil", n, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func testReaddirnames(dir string, contents []string, t *testing.T) {
|
func testReaddirnames(dir string, contents []string, t *testing.T) {
|
||||||
file, err := Open(dir)
|
file, err := Open(dir)
|
||||||
defer file.Close()
|
defer file.Close()
|
||||||
|
Loading…
Reference in New Issue
Block a user