From b00bcf506e0554b918e7aa75842277bc9a65dda8 Mon Sep 17 00:00:00 2001 From: Junegunn Choi Date: Wed, 3 Jun 2015 01:48:02 +0900 Subject: Fix #248 - Premature termination of Reader on long input --- src/reader.go | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/reader.go b/src/reader.go index d4764119..7496b775 100644 --- a/src/reader.go +++ b/src/reader.go @@ -30,9 +30,29 @@ func (r *Reader) ReadSource() { } func (r *Reader) feed(src io.Reader) { - if scanner := bufio.NewScanner(src); scanner != nil { - for scanner.Scan() { - r.pusher(scanner.Text()) + reader := bufio.NewReader(src) + eof := false +Loop: + for !eof { + buf := []byte{} + iter := 0 // TODO: max size? + for { + // "ReadLine either returns a non-nil line or it returns an error, never both" + line, isPrefix, err := reader.ReadLine() + eof = err == io.EOF + if eof { + break + } else if err != nil { + break Loop + } + iter++ + buf = append(buf, line...) + if !isPrefix { + break + } + } + if iter > 0 { + r.pusher(string(buf)) r.eventBox.Set(EvtReadNew, nil) } } -- cgit v1.2.3