mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-21 20:46:30 -05:00
tpl: Do not return errors in substr for out-of-bounds cases
Most other substr implementations don't error out in out-of-bounds cases but simply return an empty string (or a value that's printed as an empty string). We'll follow their lead and not exit template execution. Allow the user decide what to do with the empty result. Fixes #8113
This commit is contained in:
parent
788e50ad3a
commit
8a26ab0bc5
2 changed files with 7 additions and 7 deletions
|
@ -16,7 +16,6 @@ package strings
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
|
||||||
"html/template"
|
"html/template"
|
||||||
"strings"
|
"strings"
|
||||||
"unicode/utf8"
|
"unicode/utf8"
|
||||||
|
@ -322,7 +321,7 @@ func (ns *Namespace) Substr(a interface{}, nums ...interface{}) (string, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
if start > rlen-1 {
|
if start > rlen-1 {
|
||||||
return "", fmt.Errorf("start position out of bounds for %d-byte string", rlen)
|
return "", nil
|
||||||
}
|
}
|
||||||
|
|
||||||
end := rlen
|
end := rlen
|
||||||
|
@ -337,7 +336,7 @@ func (ns *Namespace) Substr(a interface{}, nums ...interface{}) (string, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
if start >= end {
|
if start >= end {
|
||||||
return "", fmt.Errorf("calculated start position greater than end position: %d > %d", start, end)
|
return "", nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if end < 0 {
|
if end < 0 {
|
||||||
|
|
|
@ -451,9 +451,9 @@ func TestSubstr(t *testing.T) {
|
||||||
{"abcdef", -3, 1, "d"},
|
{"abcdef", -3, 1, "d"},
|
||||||
{"abcdef", 0, -1, "abcde"},
|
{"abcdef", 0, -1, "abcde"},
|
||||||
{"abcdef", 2, -1, "cde"},
|
{"abcdef", 2, -1, "cde"},
|
||||||
{"abcdef", 4, -4, false},
|
{"abcdef", 4, -4, ""},
|
||||||
{"abcdef", 7, 1, false},
|
{"abcdef", 7, 1, ""},
|
||||||
{"abcdef", 6, nil, false},
|
{"abcdef", 6, nil, ""},
|
||||||
{"abcdef", 1, 100, "bcdef"},
|
{"abcdef", 1, 100, "bcdef"},
|
||||||
{"abcdef", -100, 3, "abc"},
|
{"abcdef", -100, 3, "abc"},
|
||||||
{"abcdef", -3, -1, "de"},
|
{"abcdef", -3, -1, "de"},
|
||||||
|
@ -476,6 +476,7 @@ func TestSubstr(t *testing.T) {
|
||||||
{"abcdef", "doo", nil, false},
|
{"abcdef", "doo", nil, false},
|
||||||
{"abcdef", "doo", "doo", false},
|
{"abcdef", "doo", "doo", false},
|
||||||
{"abcdef", 1, "doo", false},
|
{"abcdef", 1, "doo", false},
|
||||||
|
{"", 0, nil, ""},
|
||||||
} {
|
} {
|
||||||
|
|
||||||
var result string
|
var result string
|
||||||
|
@ -491,7 +492,7 @@ func TestSubstr(t *testing.T) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
c.Assert(err, qt.IsNil)
|
c.Assert(err, qt.IsNil, qt.Commentf("%v", test))
|
||||||
c.Check(result, qt.Equals, test.expect, qt.Commentf("%v", test))
|
c.Check(result, qt.Equals, test.expect, qt.Commentf("%v", test))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue