ref: 90c774908530390daa5813fcdd31435999971359
parent: 13435a6f608306c5094fdcd72a1d9538727f91b2
author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
date: Sun Jun 3 06:35:45 EDT 2018
tpl/strings: Adjust the overflow validation in strings.Repeat This now matches the validation in the stdlib, but we return an error instead.
--- a/tpl/strings/strings.go
+++ b/tpl/strings/strings.go
@@ -17,7 +17,6 @@
"errors"
"fmt"
"html/template"
- "math"
_strings "strings"
"unicode/utf8"
@@ -420,7 +419,6 @@
}
// Repeat returns a new string consisting of count copies of the string s.
-// The count is limited to an in16 value (up to 32767).
func (ns *Namespace) Repeat(n, s interface{}) (string, error) {ss, err := cast.ToStringE(s)
if err != nil {@@ -432,8 +430,10 @@
return "", err
}
- if sn > math.MaxInt16 {- return "", fmt.Errorf("Cannot repeat string more than %d times", math.MaxInt16)+ if sn < 0 {+ return "", errors.New("strings: negative Repeat count")+ } else if sn > 0 && len(ss)*sn/sn != len(ss) {+ return "", errors.New("strings: Repeat count causes overflow")}
return _strings.Repeat(ss, sn), nil
--- a/tpl/strings/strings_test.go
+++ b/tpl/strings/strings_test.go
@@ -730,7 +730,7 @@
// errors
{"", tstNoStringer{}, false}, {tstNoStringer{}, "", false},- {"hi", math.MaxInt16 + 1, false},+ {"ab", math.MaxInt64, false}, } { errMsg := fmt.Sprintf("[%d] %v", i, test)--
⑨