diff --git a/src/bufio/bufio.go b/src/bufio/bufio.go index 72545a7509541b..a188160bb539ea 100644 --- a/src/bufio/bufio.go +++ b/src/bufio/bufio.go @@ -314,9 +314,11 @@ func (b *Reader) Buffered() int { return b.w - b.r } // ReadBytes or ReadString instead. // ReadSlice returns err != nil if and only if line does not end in delim. func (b *Reader) ReadSlice(delim byte) (line []byte, err error) { + s := 0 // search start index for { // Search buffer. - if i := bytes.IndexByte(b.buf[b.r:b.w], delim); i >= 0 { + if i := bytes.IndexByte(b.buf[b.r+s:b.w], delim); i >= 0 { + i += s line = b.buf[b.r : b.r+i+1] b.r += i + 1 break @@ -338,6 +340,8 @@ func (b *Reader) ReadSlice(delim byte) (line []byte, err error) { break } + s = b.w - b.r // do not rescan area we scanned before + b.fill() // buffer is not full }