From: Rob Pike Date: Fri, 24 Sep 2010 02:28:14 +0000 (+1000) Subject: bufio.UnreadRune: fix bug at EOF X-Git-Tag: weekly.2010-09-29~69 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=e439345dfd3c82a04fb334434276035cc59e00be;p=gostls13.git bufio.UnreadRune: fix bug at EOF Fixes #1132. R=rsc CC=golang-dev https://golang.org/cl/2215045 --- diff --git a/src/pkg/bufio/bufio.go b/src/pkg/bufio/bufio.go index b85a0793cc..1cac079274 100644 --- a/src/pkg/bufio/bufio.go +++ b/src/pkg/bufio/bufio.go @@ -207,6 +207,7 @@ func (b *Reader) ReadRune() (rune int, size int, err os.Error) { for b.r+utf8.UTFMax > b.w && !utf8.FullRune(b.buf[b.r:b.w]) && b.err == nil { b.fill() } + b.lastRuneSize = -1 if b.r == b.w { return 0, 0, b.err } diff --git a/src/pkg/bufio/bufio_test.go b/src/pkg/bufio/bufio_test.go index 5df97bd245..fb0ed045ae 100644 --- a/src/pkg/bufio/bufio_test.go +++ b/src/pkg/bufio/bufio_test.go @@ -319,6 +319,20 @@ func TestUnreadRuneError(t *testing.T) { } } +func TestUnreadRuneAtEOF(t *testing.T) { + // UnreadRune/ReadRune should error at EOF (was a bug; used to panic) + r := NewReader(strings.NewReader("x")) + r.ReadRune() + r.ReadRune() + r.UnreadRune() + _, _, err := r.ReadRune() + if err == nil { + t.Error("expected error at EOF") + } else if err != os.EOF { + t.Error("expected EOF; got", err) + } +} + func TestReadWriteRune(t *testing.T) { const NRune = 1000 byteBuf := new(bytes.Buffer)