Skip to content

Commit 0118242

Browse files
committed
strings, bytes: fix Reader 0 byte read at EOF
0 byte reads at EOF weren't returning EOF. Change-Id: I19b5fd5a72e83d49566a230ce4067be03f00d14b Reviewed-on: https://go-review.googlesource.com/22740 Reviewed-by: Bryan Mills <[email protected]> Run-TryBot: Brad Fitzpatrick <[email protected]> TryBot-Result: Gobot Gobot <[email protected]>
1 parent 15f7a66 commit 0118242

File tree

4 files changed

+11
-15
lines changed

4 files changed

+11
-15
lines changed

src/bytes/reader.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,6 @@ func (r *Reader) Len() int {
3636
func (r *Reader) Size() int64 { return int64(len(r.s)) }
3737

3838
func (r *Reader) Read(b []byte) (n int, err error) {
39-
if len(b) == 0 {
40-
return 0, nil
41-
}
4239
if r.i >= int64(len(r.s)) {
4340
return 0, io.EOF
4441
}

src/bytes/reader_test.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,15 @@ func TestReader(t *testing.T) {
2121
n int
2222
want string
2323
wantpos int64
24+
readerr error
2425
seekerr string
2526
}{
2627
{seek: io.SeekStart, off: 0, n: 20, want: "0123456789"},
2728
{seek: io.SeekStart, off: 1, n: 1, want: "1"},
2829
{seek: io.SeekCurrent, off: 1, wantpos: 3, n: 2, want: "34"},
2930
{seek: io.SeekStart, off: -1, seekerr: "bytes.Reader.Seek: negative position"},
30-
{seek: io.SeekStart, off: 1 << 33, wantpos: 1 << 33},
31-
{seek: io.SeekCurrent, off: 1, wantpos: 1<<33 + 1},
31+
{seek: io.SeekStart, off: 1 << 33, wantpos: 1 << 33, readerr: io.EOF},
32+
{seek: io.SeekCurrent, off: 1, wantpos: 1<<33 + 1, readerr: io.EOF},
3233
{seek: io.SeekStart, n: 5, want: "01234"},
3334
{seek: io.SeekCurrent, n: 5, want: "56789"},
3435
{seek: io.SeekEnd, off: -1, n: 1, wantpos: 9, want: "9"},
@@ -49,8 +50,8 @@ func TestReader(t *testing.T) {
4950
}
5051
buf := make([]byte, tt.n)
5152
n, err := r.Read(buf)
52-
if err != nil {
53-
t.Errorf("%d. read = %v", i, err)
53+
if err != tt.readerr {
54+
t.Errorf("%d. read = %v; want %v", i, err, tt.readerr)
5455
continue
5556
}
5657
got := string(buf[:n])
@@ -173,7 +174,7 @@ func TestReaderLen(t *testing.T) {
173174
t.Errorf("r.Len(): got %d, want %d", got, want)
174175
}
175176
if n, err := r.Read(make([]byte, 1)); err != nil || n != 1 {
176-
t.Errorf("Read failed: read %d %v", n, err)
177+
t.Errorf("Read failed: read %d %v; want 1, nil", n, err)
177178
}
178179
if got, want := r.Len(), 0; got != want {
179180
t.Errorf("r.Len(): got %d, want %d", got, want)

src/strings/reader.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,6 @@ func (r *Reader) Len() int {
3535
func (r *Reader) Size() int64 { return int64(len(r.s)) }
3636

3737
func (r *Reader) Read(b []byte) (n int, err error) {
38-
if len(b) == 0 {
39-
return 0, nil
40-
}
4138
if r.i >= int64(len(r.s)) {
4239
return 0, io.EOF
4340
}

src/strings/reader_test.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,15 @@ func TestReader(t *testing.T) {
2222
n int
2323
want string
2424
wantpos int64
25+
readerr error
2526
seekerr string
2627
}{
2728
{seek: io.SeekStart, off: 0, n: 20, want: "0123456789"},
2829
{seek: io.SeekStart, off: 1, n: 1, want: "1"},
2930
{seek: io.SeekCurrent, off: 1, wantpos: 3, n: 2, want: "34"},
3031
{seek: io.SeekStart, off: -1, seekerr: "strings.Reader.Seek: negative position"},
31-
{seek: io.SeekStart, off: 1 << 33, wantpos: 1 << 33},
32-
{seek: io.SeekCurrent, off: 1, wantpos: 1<<33 + 1},
32+
{seek: io.SeekStart, off: 1 << 33, wantpos: 1 << 33, readerr: io.EOF},
33+
{seek: io.SeekCurrent, off: 1, wantpos: 1<<33 + 1, readerr: io.EOF},
3334
{seek: io.SeekStart, n: 5, want: "01234"},
3435
{seek: io.SeekCurrent, n: 5, want: "56789"},
3536
{seek: io.SeekEnd, off: -1, n: 1, wantpos: 9, want: "9"},
@@ -50,8 +51,8 @@ func TestReader(t *testing.T) {
5051
}
5152
buf := make([]byte, tt.n)
5253
n, err := r.Read(buf)
53-
if err != nil {
54-
t.Errorf("%d. read = %v", i, err)
54+
if err != tt.readerr {
55+
t.Errorf("%d. read = %v; want %v", i, err, tt.readerr)
5556
continue
5657
}
5758
got := string(buf[:n])

0 commit comments

Comments
 (0)