aboutsummaryrefslogtreecommitdiff
path: root/libgo/go/bufio/scan.go
diff options
context:
space:
mode:
Diffstat (limited to 'libgo/go/bufio/scan.go')
-rw-r--r--libgo/go/bufio/scan.go5
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)