diff options
Diffstat (limited to 'libgo/go/bufio/scan.go')
-rw-r--r-- | libgo/go/bufio/scan.go | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/libgo/go/bufio/scan.go b/libgo/go/bufio/scan.go index 4e787c4..af46a14 100644 --- a/libgo/go/bufio/scan.go +++ b/libgo/go/bufio/scan.go @@ -69,6 +69,7 @@ var ( ErrTooLong = errors.New("bufio.Scanner: token too long") ErrNegativeAdvance = errors.New("bufio.Scanner: SplitFunc returns negative advance count") ErrAdvanceTooFar = errors.New("bufio.Scanner: SplitFunc returns advance count beyond input") + ErrBadReadCount = errors.New("bufio.Scanner: Read returned impossible count") ) const ( @@ -211,6 +212,10 @@ func (s *Scanner) Scan() bool { // be extra careful: Scanner is for safe, simple jobs. for loop := 0; ; { n, err := s.r.Read(s.buf[s.end:len(s.buf)]) + if n < 0 || len(s.buf)-s.end < n { + s.setErr(ErrBadReadCount) + break + } s.end += n if err != nil { s.setErr(err) |