mirror of
https://github.com/golang/go.git
synced 2025-05-18 22:04:38 +00:00
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 <bcmills@google.com> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
parent
15f7a66f36
commit
01182425f8
@ -36,9 +36,6 @@ func (r *Reader) Len() int {
|
|||||||
func (r *Reader) Size() int64 { return int64(len(r.s)) }
|
func (r *Reader) Size() int64 { return int64(len(r.s)) }
|
||||||
|
|
||||||
func (r *Reader) Read(b []byte) (n int, err error) {
|
func (r *Reader) Read(b []byte) (n int, err error) {
|
||||||
if len(b) == 0 {
|
|
||||||
return 0, nil
|
|
||||||
}
|
|
||||||
if r.i >= int64(len(r.s)) {
|
if r.i >= int64(len(r.s)) {
|
||||||
return 0, io.EOF
|
return 0, io.EOF
|
||||||
}
|
}
|
||||||
|
@ -21,14 +21,15 @@ func TestReader(t *testing.T) {
|
|||||||
n int
|
n int
|
||||||
want string
|
want string
|
||||||
wantpos int64
|
wantpos int64
|
||||||
|
readerr error
|
||||||
seekerr string
|
seekerr string
|
||||||
}{
|
}{
|
||||||
{seek: io.SeekStart, off: 0, n: 20, want: "0123456789"},
|
{seek: io.SeekStart, off: 0, n: 20, want: "0123456789"},
|
||||||
{seek: io.SeekStart, off: 1, n: 1, want: "1"},
|
{seek: io.SeekStart, off: 1, n: 1, want: "1"},
|
||||||
{seek: io.SeekCurrent, off: 1, wantpos: 3, n: 2, want: "34"},
|
{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, seekerr: "bytes.Reader.Seek: negative position"},
|
||||||
{seek: io.SeekStart, off: 1 << 33, wantpos: 1 << 33},
|
{seek: io.SeekStart, off: 1 << 33, wantpos: 1 << 33, readerr: io.EOF},
|
||||||
{seek: io.SeekCurrent, off: 1, wantpos: 1<<33 + 1},
|
{seek: io.SeekCurrent, off: 1, wantpos: 1<<33 + 1, readerr: io.EOF},
|
||||||
{seek: io.SeekStart, n: 5, want: "01234"},
|
{seek: io.SeekStart, n: 5, want: "01234"},
|
||||||
{seek: io.SeekCurrent, n: 5, want: "56789"},
|
{seek: io.SeekCurrent, n: 5, want: "56789"},
|
||||||
{seek: io.SeekEnd, off: -1, n: 1, wantpos: 9, want: "9"},
|
{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)
|
buf := make([]byte, tt.n)
|
||||||
n, err := r.Read(buf)
|
n, err := r.Read(buf)
|
||||||
if err != nil {
|
if err != tt.readerr {
|
||||||
t.Errorf("%d. read = %v", i, err)
|
t.Errorf("%d. read = %v; want %v", i, err, tt.readerr)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
got := string(buf[:n])
|
got := string(buf[:n])
|
||||||
@ -173,7 +174,7 @@ func TestReaderLen(t *testing.T) {
|
|||||||
t.Errorf("r.Len(): got %d, want %d", got, want)
|
t.Errorf("r.Len(): got %d, want %d", got, want)
|
||||||
}
|
}
|
||||||
if n, err := r.Read(make([]byte, 1)); err != nil || n != 1 {
|
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 {
|
if got, want := r.Len(), 0; got != want {
|
||||||
t.Errorf("r.Len(): got %d, want %d", got, want)
|
t.Errorf("r.Len(): got %d, want %d", got, want)
|
||||||
|
@ -35,9 +35,6 @@ func (r *Reader) Len() int {
|
|||||||
func (r *Reader) Size() int64 { return int64(len(r.s)) }
|
func (r *Reader) Size() int64 { return int64(len(r.s)) }
|
||||||
|
|
||||||
func (r *Reader) Read(b []byte) (n int, err error) {
|
func (r *Reader) Read(b []byte) (n int, err error) {
|
||||||
if len(b) == 0 {
|
|
||||||
return 0, nil
|
|
||||||
}
|
|
||||||
if r.i >= int64(len(r.s)) {
|
if r.i >= int64(len(r.s)) {
|
||||||
return 0, io.EOF
|
return 0, io.EOF
|
||||||
}
|
}
|
||||||
|
@ -22,14 +22,15 @@ func TestReader(t *testing.T) {
|
|||||||
n int
|
n int
|
||||||
want string
|
want string
|
||||||
wantpos int64
|
wantpos int64
|
||||||
|
readerr error
|
||||||
seekerr string
|
seekerr string
|
||||||
}{
|
}{
|
||||||
{seek: io.SeekStart, off: 0, n: 20, want: "0123456789"},
|
{seek: io.SeekStart, off: 0, n: 20, want: "0123456789"},
|
||||||
{seek: io.SeekStart, off: 1, n: 1, want: "1"},
|
{seek: io.SeekStart, off: 1, n: 1, want: "1"},
|
||||||
{seek: io.SeekCurrent, off: 1, wantpos: 3, n: 2, want: "34"},
|
{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, seekerr: "strings.Reader.Seek: negative position"},
|
||||||
{seek: io.SeekStart, off: 1 << 33, wantpos: 1 << 33},
|
{seek: io.SeekStart, off: 1 << 33, wantpos: 1 << 33, readerr: io.EOF},
|
||||||
{seek: io.SeekCurrent, off: 1, wantpos: 1<<33 + 1},
|
{seek: io.SeekCurrent, off: 1, wantpos: 1<<33 + 1, readerr: io.EOF},
|
||||||
{seek: io.SeekStart, n: 5, want: "01234"},
|
{seek: io.SeekStart, n: 5, want: "01234"},
|
||||||
{seek: io.SeekCurrent, n: 5, want: "56789"},
|
{seek: io.SeekCurrent, n: 5, want: "56789"},
|
||||||
{seek: io.SeekEnd, off: -1, n: 1, wantpos: 9, want: "9"},
|
{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)
|
buf := make([]byte, tt.n)
|
||||||
n, err := r.Read(buf)
|
n, err := r.Read(buf)
|
||||||
if err != nil {
|
if err != tt.readerr {
|
||||||
t.Errorf("%d. read = %v", i, err)
|
t.Errorf("%d. read = %v; want %v", i, err, tt.readerr)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
got := string(buf[:n])
|
got := string(buf[:n])
|
||||||
|
Loading…
x
Reference in New Issue
Block a user