]> Cypherpunks repositories - gostls13.git/commitdiff
encoding/line: fix line returned after EOF
authorAdam Langley <agl@golang.org>
Tue, 15 Feb 2011 14:52:20 +0000 (09:52 -0500)
committerAdam Langley <agl@golang.org>
Tue, 15 Feb 2011 14:52:20 +0000 (09:52 -0500)
Fixes #1509.

R=r
CC=golang-dev
https://golang.org/cl/4167045

src/pkg/encoding/line/line.go
src/pkg/encoding/line/line_test.go

index 779b5758adde09cad0a818197a063d73982f7fdb..f46ce1c83a05711c4a0eb87d3ed241eaf94f600f 100644 (file)
@@ -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")
index ff16d10c709d7cbab1cda4050f8dc4eb359e5205..ff3d51669b54326646975bd1a9ce2fa12e69a7e6 100644 (file)
@@ -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)
+       }
+}