diff --git a/s2/decode.go b/s2/decode.go index b5fa4d3f00..12544c3fa4 100644 --- a/s2/decode.go +++ b/s2/decode.go @@ -11,6 +11,7 @@ import ( "fmt" "io" "io/ioutil" + "math" "runtime" "sync" ) @@ -719,7 +720,11 @@ func (r *Reader) Skip(n int64) error { // decoded[i:j] contains decoded bytes that have not yet been passed on. left := int64(r.j - r.i) if left >= n { - r.i += int(n) + tmp := int64(r.i) + n + if tmp > math.MaxInt32 { + return errors.New("s2: internal overflow in skip") + } + r.i += int(tmp) return nil } n -= int64(r.j - r.i)