]> Cypherpunks repositories - gostls13.git/commitdiff
strings, bytes: fix Reader 0 byte read at EOF
authorBrad Fitzpatrick <bradfitz@golang.org>
Tue, 3 May 2016 19:54:49 +0000 (19:54 +0000)
committerBrad Fitzpatrick <bradfitz@golang.org>
Tue, 3 May 2016 21:01:13 +0000 (21:01 +0000)
0 byte reads at EOF weren't returning EOF.

Change-Id: I19b5fd5a72e83d49566a230ce4067be03f00d14b
Reviewed-on: https://go-review.googlesource.com/22740
Reviewed-by: Bryan Mills <bcmills@google.com>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/bytes/reader.go
src/bytes/reader_test.go
src/strings/reader.go
src/strings/reader_test.go

index aa39890f3bd24f861019bc61aef80b25f7786d9c..83826c80c417af2817a74a5d9ddeb8437886ddf1 100644 (file)
@@ -36,9 +36,6 @@ func (r *Reader) Len() int {
 func (r *Reader) Size() int64 { return int64(len(r.s)) }
 
 func (r *Reader) Read(b []byte) (n int, err error) {
-       if len(b) == 0 {
-               return 0, nil
-       }
        if r.i >= int64(len(r.s)) {
                return 0, io.EOF
        }
index 9341cd5b45ed5141d6b54b8a594fd2e2c978c444..b5c78506189e50a96bdf9af44b3543ce930aa019 100644 (file)
@@ -21,14 +21,15 @@ func TestReader(t *testing.T) {
                n       int
                want    string
                wantpos int64
+               readerr error
                seekerr string
        }{
                {seek: io.SeekStart, off: 0, n: 20, want: "0123456789"},
                {seek: io.SeekStart, off: 1, n: 1, want: "1"},
                {seek: io.SeekCurrent, off: 1, wantpos: 3, n: 2, want: "34"},
                {seek: io.SeekStart, off: -1, seekerr: "bytes.Reader.Seek: negative position"},
-               {seek: io.SeekStart, off: 1 << 33, wantpos: 1 << 33},
-               {seek: io.SeekCurrent, off: 1, wantpos: 1<<33 + 1},
+               {seek: io.SeekStart, off: 1 << 33, wantpos: 1 << 33, readerr: io.EOF},
+               {seek: io.SeekCurrent, off: 1, wantpos: 1<<33 + 1, readerr: io.EOF},
                {seek: io.SeekStart, n: 5, want: "01234"},
                {seek: io.SeekCurrent, n: 5, want: "56789"},
                {seek: io.SeekEnd, off: -1, n: 1, wantpos: 9, want: "9"},
@@ -49,8 +50,8 @@ func TestReader(t *testing.T) {
                }
                buf := make([]byte, tt.n)
                n, err := r.Read(buf)
-               if err != nil {
-                       t.Errorf("%d. read = %v", i, err)
+               if err != tt.readerr {
+                       t.Errorf("%d. read = %v; want %v", i, err, tt.readerr)
                        continue
                }
                got := string(buf[:n])
@@ -173,7 +174,7 @@ func TestReaderLen(t *testing.T) {
                t.Errorf("r.Len(): got %d, want %d", got, want)
        }
        if n, err := r.Read(make([]byte, 1)); err != nil || n != 1 {
-               t.Errorf("Read failed: read %d %v", n, err)
+               t.Errorf("Read failed: read %d %v; want 1, nil", n, err)
        }
        if got, want := r.Len(), 0; got != want {
                t.Errorf("r.Len(): got %d, want %d", got, want)
index 74eed4d57488b553fb7bc32f150dbaf7dfedea4f..e254837c63b96ad96386563d233f7afa37b40475 100644 (file)
@@ -35,9 +35,6 @@ func (r *Reader) Len() int {
 func (r *Reader) Size() int64 { return int64(len(r.s)) }
 
 func (r *Reader) Read(b []byte) (n int, err error) {
-       if len(b) == 0 {
-               return 0, nil
-       }
        if r.i >= int64(len(r.s)) {
                return 0, io.EOF
        }
index 6e9d904b9dcfb664a058c3f09997cdb550856fbc..bf40eb1a31eb46fd9991137b119dcda13bad80de 100644 (file)
@@ -22,14 +22,15 @@ func TestReader(t *testing.T) {
                n       int
                want    string
                wantpos int64
+               readerr error
                seekerr string
        }{
                {seek: io.SeekStart, off: 0, n: 20, want: "0123456789"},
                {seek: io.SeekStart, off: 1, n: 1, want: "1"},
                {seek: io.SeekCurrent, off: 1, wantpos: 3, n: 2, want: "34"},
                {seek: io.SeekStart, off: -1, seekerr: "strings.Reader.Seek: negative position"},
-               {seek: io.SeekStart, off: 1 << 33, wantpos: 1 << 33},
-               {seek: io.SeekCurrent, off: 1, wantpos: 1<<33 + 1},
+               {seek: io.SeekStart, off: 1 << 33, wantpos: 1 << 33, readerr: io.EOF},
+               {seek: io.SeekCurrent, off: 1, wantpos: 1<<33 + 1, readerr: io.EOF},
                {seek: io.SeekStart, n: 5, want: "01234"},
                {seek: io.SeekCurrent, n: 5, want: "56789"},
                {seek: io.SeekEnd, off: -1, n: 1, wantpos: 9, want: "9"},
@@ -50,8 +51,8 @@ func TestReader(t *testing.T) {
                }
                buf := make([]byte, tt.n)
                n, err := r.Read(buf)
-               if err != nil {
-                       t.Errorf("%d. read = %v", i, err)
+               if err != tt.readerr {
+                       t.Errorf("%d. read = %v; want %v", i, err, tt.readerr)
                        continue
                }
                got := string(buf[:n])