summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Griesemer <gri@golang.org>2014-04-09 18:23:53 -0700
committerRobert Griesemer <gri@golang.org>2014-04-09 18:23:53 -0700
commit6898a58fa8dc43e91dcc828ce0b781f977ff1893 (patch)
treec1824648883009b43248d64b75ec0646259e04f4
parent4bf5f65b9dc0902c2f8c157653fc43bfa87fc28f (diff)
downloadgo-6898a58fa8dc43e91dcc828ce0b781f977ff1893.tar.gz
undo CL 86220044 / 41388e58be65
bufio: undo incorrect bug fix ??? original CL description bufio: fix potential endless loop in ReadByte Fixes issue 7745. LGTM=bradfitz, r R=r, bradfitz CC=golang-codereviews https://codereview.appspot.com/86220044 ??? LGTM=adg R=r, adg CC=golang-codereviews https://codereview.appspot.com/85550045
-rw-r--r--src/pkg/bufio/bufio.go26
-rw-r--r--src/pkg/bufio/bufio_test.go29
2 files changed, 8 insertions, 47 deletions
diff --git a/src/pkg/bufio/bufio.go b/src/pkg/bufio/bufio.go
index 2f51badc9..1e0cdae38 100644
--- a/src/pkg/bufio/bufio.go
+++ b/src/pkg/bufio/bufio.go
@@ -88,22 +88,15 @@ func (b *Reader) fill() {
b.r = 0
}
- // Read new data: try a limited number of times.
- for i := maxConsecutiveEmptyReads; i > 0; i-- {
- n, err := b.rd.Read(b.buf[b.w:])
- if n < 0 {
- panic(errNegativeRead)
- }
- b.w += n
- if err != nil {
- b.err = err
- return
- }
- if n > 0 {
- return
- }
+ // Read new data.
+ n, err := b.rd.Read(b.buf[b.w:])
+ if n < 0 {
+ panic(errNegativeRead)
+ }
+ b.w += n
+ if err != nil {
+ b.err = err
}
- b.err = io.ErrNoProgress
}
func (b *Reader) readErr() error {
@@ -158,9 +151,6 @@ func (b *Reader) Read(p []byte) (n int, err error) {
// Large read, empty buffer.
// Read directly into p to avoid copy.
n, b.err = b.rd.Read(p)
- if n < 0 {
- panic(errNegativeRead)
- }
if n > 0 {
b.lastByte = int(p[n-1])
b.lastRuneSize = -1
diff --git a/src/pkg/bufio/bufio_test.go b/src/pkg/bufio/bufio_test.go
index 406eb153b..32ca86161 100644
--- a/src/pkg/bufio/bufio_test.go
+++ b/src/pkg/bufio/bufio_test.go
@@ -14,7 +14,6 @@ import (
"strings"
"testing"
"testing/iotest"
- "time"
"unicode/utf8"
)
@@ -175,34 +174,6 @@ func TestReader(t *testing.T) {
}
}
-type zeroReader struct{}
-
-func (zeroReader) Read(p []byte) (int, error) {
- return 0, nil
-}
-
-func TestZeroReader(t *testing.T) {
- var z zeroReader
- r := NewReader(z)
-
- c := make(chan error)
- go func() {
- _, err := r.ReadByte()
- c <- err
- }()
-
- select {
- case err := <-c:
- if err == nil {
- t.Error("error expected")
- } else if err != io.ErrNoProgress {
- t.Error("unexpected error:", err)
- }
- case <-time.After(time.Second):
- t.Error("test timed out (endless loop in ReadByte?)")
- }
-}
-
// A StringReader delivers its data one string segment at a time via Read.
type StringReader struct {
data []string