src/pkg/encoding/line/line.go | 3 +++ src/pkg/encoding/line/line_test.go | 23 +++++++++++++++++++++++ diff --git a/src/pkg/encoding/line/line.go b/src/pkg/encoding/line/line.go index 779b5758adde09cad0a818197a063d73982f7fdb..f46ce1c83a05711c4a0eb87d3ed241eaf94f600f 100644 --- a/src/pkg/encoding/line/line.go +++ b/src/pkg/encoding/line/line.go @@ -105,6 +105,9 @@ n, readErr := l.in.Read(l.buf[oldLen:]) 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 ff16d10c709d7cbab1cda4050f8dc4eb359e5205..ff3d51669b54326646975bd1a9ce2fa12e69a7e6 100644 --- a/src/pkg/encoding/line/line_test.go +++ b/src/pkg/encoding/line/line_test.go @@ -7,6 +7,7 @@ import ( "bytes" "io" + "io/ioutil" "os" "testing" ) @@ -108,3 +109,25 @@ if outbuf.String() != restData { 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) + } +}