aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam Langley <agl@golang.org>2011-02-15 09:52:20 -0500
committerAdam Langley <agl@golang.org>2011-02-15 09:52:20 -0500
commit5311d915f4a71fd6966042d6f8c2319b111e2aa1 (patch)
tree85d045943e3a97058976e4fff2112af8cd7773ea
parente6ee0d24924f926f3a648fdcd5e5ccb81e1d4f14 (diff)
downloadgo-5311d915f4a71fd6966042d6f8c2319b111e2aa1.tar.gz
go-5311d915f4a71fd6966042d6f8c2319b111e2aa1.zip
encoding/line: fix line returned after EOF
Fixes #1509. R=r CC=golang-dev https://golang.org/cl/4167045
-rw-r--r--src/pkg/encoding/line/line.go3
-rw-r--r--src/pkg/encoding/line/line_test.go23
2 files changed, 26 insertions, 0 deletions
diff --git a/src/pkg/encoding/line/line.go b/src/pkg/encoding/line/line.go
index 779b5758ad..f46ce1c83a 100644
--- a/src/pkg/encoding/line/line.go
+++ b/src/pkg/encoding/line/line.go
@@ -105,6 +105,9 @@ func (l *Reader) ReadLine() (line []byte, isPrefix bool, err os.Error) {
l.buf = l.buf[:oldLen+n]
if readErr != nil {
l.err = readErr
+ if len(l.buf) == 0 {
+ return nil, false, readErr
+ }
}
}
panic("unreachable")
diff --git a/src/pkg/encoding/line/line_test.go b/src/pkg/encoding/line/line_test.go
index ff16d10c70..ff3d51669b 100644
--- a/src/pkg/encoding/line/line_test.go
+++ b/src/pkg/encoding/line/line_test.go
@@ -7,6 +7,7 @@ package line
import (
"bytes"
"io"
+ "io/ioutil"
"os"
"testing"
)
@@ -108,3 +109,25 @@ func TestReadAfterLines(t *testing.T) {
t.Errorf("bad result for Read: got %q; expected %q", outbuf.String(), restData)
}
}
+
+func TestReadEmptyBuffer(t *testing.T) {
+ l := NewReader(bytes.NewBuffer(nil), 10)
+ line, isPrefix, err := l.ReadLine()
+ if err != os.EOF {
+ t.Errorf("expected EOF from ReadLine, got '%s' %t %s", line, isPrefix, err)
+ }
+}
+
+func TestLinesAfterRead(t *testing.T) {
+ l := NewReader(bytes.NewBuffer([]byte("foo")), 10)
+ _, err := ioutil.ReadAll(l)
+ if err != nil {
+ t.Error(err)
+ return
+ }
+
+ line, isPrefix, err := l.ReadLine()
+ if err != os.EOF {
+ t.Errorf("expected EOF from ReadLine, got '%s' %t %s", line, isPrefix, err)
+ }
+}