From 5862fd2a60b5d16f2437bd8c8b7bac700de5f047 Mon Sep 17 00:00:00 2001 From: Cameron Moore Date: Sat, 28 Nov 2020 09:56:49 -0600 Subject: [PATCH] tpl: Fix substr when length parameter is zero When length parameter is zero, always return an empty string. Updates #7993 --- tpl/strings/strings.go | 7 +++++-- tpl/strings/strings_test.go | 5 ++++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/tpl/strings/strings.go b/tpl/strings/strings.go index 9427d8e8a..60cb658ba 100644 --- a/tpl/strings/strings.go +++ b/tpl/strings/strings.go @@ -327,9 +327,12 @@ func (ns *Namespace) Substr(a interface{}, nums ...interface{}) (string, error) end := rlen - if length < 0 { + switch { + case length == 0: + return "", nil + case length < 0: end += length - } else if length > 0 { + case length > 0: end = start + length } diff --git a/tpl/strings/strings_test.go b/tpl/strings/strings_test.go index bb90200c0..c09bfaf67 100644 --- a/tpl/strings/strings_test.go +++ b/tpl/strings/strings_test.go @@ -441,6 +441,9 @@ func TestSubstr(t *testing.T) { }{ {"abc", 1, 2, "bc"}, {"abc", 0, 1, "a"}, + {"abcdef", 0, 0, ""}, + {"abcdef", 1, 0, ""}, + {"abcdef", -1, 0, ""}, {"abcdef", -1, 2, "f"}, {"abcdef", -3, 3, "def"}, {"abcdef", -1, nil, "f"}, @@ -488,7 +491,7 @@ func TestSubstr(t *testing.T) { } c.Assert(err, qt.IsNil) - c.Assert(result, qt.Equals, test.expect, qt.Commentf("%v", test)) + c.Check(result, qt.Equals, test.expect, qt.Commentf("%v", test)) } _, err = ns.Substr("abcdef")