diff --git a/lib/pure/strutils.nim b/lib/pure/strutils.nim index 04ba713153398..0028ac4fba5d8 100644 --- a/lib/pure/strutils.nim +++ b/lib/pure/strutils.nim @@ -2813,7 +2813,7 @@ func strip*(s: string, leading = true, trailing = true, if leading: while first <= last and s[first] in chars: inc(first) if trailing: - while last >= 0 and s[last] in chars: dec(last) + while last >= first and s[last] in chars: dec(last) result = substr(s, first, last) func stripLineEnd*(s: var string) = diff --git a/tests/stdlib/tstrutils.nim b/tests/stdlib/tstrutils.nim index b62c82ffba6d4..8d6fe75ae92af 100644 --- a/tests/stdlib/tstrutils.nim +++ b/tests/stdlib/tstrutils.nim @@ -28,6 +28,19 @@ template main() = doAssert strip("sfoofoofoos", leading = false, chars = {'s'}) == "sfoofoofoo" doAssert strip("sfoofoofoos", trailing = false, chars = {'s'}) == "foofoofoos" + block: + let a = "xxxxxx" + doAssert a.strip(chars={'x'}).len == 0 + + doAssert "".strip(chars={'x'}).len == 0 + doAssert " ".strip(chars={'x'}) == " " + doAssert "xxx xxx".strip(chars={'x'}) == " " + doAssert "xxx wind".strip(chars={'x'}) == " wind" + doAssert "xxx iii".strip(chars={'i'}) == "xxx " + doAssert "x".strip(leading = false, chars={'x'}).len == 0 + doAssert "x".strip(trailing = false, chars={'x'}).len == 0 + doAssert "x".strip(leading = false, trailing = false, chars={'x'}) == "x" + block: # split var ret: seq[string] # or use `toSeq` or `collect` for p in split("/home/a1:xyz:/usr/bin", {':'}): ret.add p