From 7b40b0c3a332cbfaa1eb17bdafd2ddf12119ec45 Mon Sep 17 00:00:00 2001 From: Emmanuel Odeke Date: Wed, 28 Sep 2016 01:54:38 -0700 Subject: strings, bytes: panic if Repeat overflows or if given a negative count Panic if Repeat is given a negative count or if the value of (len(*) * count) is detected to overflow. We panic because we cannot change the signature of Repeat to return an error. Fixes #16237 Change-Id: I9f5ba031a5b8533db0582d7a672ffb715143f3fb Reviewed-on: https://go-review.googlesource.com/29954 Run-TryBot: Brad Fitzpatrick TryBot-Result: Gobot Gobot Reviewed-by: Brad Fitzpatrick --- src/strings/strings.go | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'src/strings/strings.go') diff --git a/src/strings/strings.go b/src/strings/strings.go index c5355db9a2..10922f3c1d 100644 --- a/src/strings/strings.go +++ b/src/strings/strings.go @@ -418,7 +418,20 @@ func Map(mapping func(rune) rune, s string) string { } // Repeat returns a new string consisting of count copies of the string s. +// +// It panics if count is negative or if +// the result of (len(s) * count) overflows. func Repeat(s string, count int) string { + // Since we cannot return an error on overflow, + // we should panic if the repeat will generate + // an overflow. + // See Issue golang.org/issue/16237 + if count < 0 { + panic("strings: negative Repeat count") + } else if count > 0 && len(s)*count/count != len(s) { + panic("strings: Repeat count causes overflow") + } + b := make([]byte, len(s)*count) bp := copy(b, s) for bp < len(b) { -- cgit v1.3