diff --git a/lib/pure/ropes.nim b/lib/pure/ropes.nim index 0797bbe060..a39533e581 100644 --- a/lib/pure/ropes.nim +++ b/lib/pure/ropes.nim @@ -262,7 +262,7 @@ proc `%`*(frmt: string, args: openArray[Rope]): Rope {. while true: j = j * 10 + ord(frmt[i]) - ord('0') inc(i) - if frmt[i] notin {'0'..'9'}: break + if i >= frmt.len or frmt[i] notin {'0'..'9'}: break add(result, args[j-1]) of '{': inc(i) diff --git a/tests/stdlib/tropes.nim b/tests/stdlib/tropes.nim index 9678e26c35..0c95d5c5f6 100644 --- a/tests/stdlib/tropes.nim +++ b/tests/stdlib/tropes.nim @@ -64,3 +64,10 @@ block: inc i doAssert r[66] == '\0' + +block: + let r1 = "$1 $2 $3" % [rope("Nim"), rope("is"), rope("a great language")] + doAssert $r1 == "Nim is a great language" + + let r2 = "$# $# $#" % [rope("Nim"), rope("is"), rope("a great language")] + doAssert $r2 == "Nim is a great language"