Skip to content

Commit fdbec96

Browse files
authored
Fix #19107 (#19286) [backport]
1 parent fa96e56 commit fdbec96

File tree

1 file changed

+10
-2
lines changed

1 file changed

+10
-2
lines changed

lib/pure/strformat.nim

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -574,6 +574,9 @@ template formatValue(result: var string; value: cstring; specifier: string) =
574574
result.add value
575575

576576
proc strformatImpl(f: string; openChar, closeChar: char): NimNode =
577+
template missingCloseChar =
578+
error("invalid format string: missing closing character '" & closeChar & "'")
579+
577580
if openChar == ':' or closeChar == ':':
578581
error "openChar and closeChar must not be ':'"
579582
var i = 0
@@ -618,6 +621,8 @@ proc strformatImpl(f: string; openChar, closeChar: char): NimNode =
618621
let start = i
619622
inc i
620623
i += f.skipWhitespace(i)
624+
if i == f.len:
625+
missingCloseChar
621626
if f[i] == closeChar or f[i] == ':':
622627
result.add newCall(bindSym"add", res, newLit(subexpr & f[start ..< i]))
623628
else:
@@ -627,6 +632,9 @@ proc strformatImpl(f: string; openChar, closeChar: char): NimNode =
627632
subexpr.add f[i]
628633
inc i
629634

635+
if i == f.len:
636+
missingCloseChar
637+
630638
var x: NimNode
631639
try:
632640
x = parseExpr(subexpr)
@@ -639,10 +647,10 @@ proc strformatImpl(f: string; openChar, closeChar: char): NimNode =
639647
while i < f.len and f[i] != closeChar:
640648
options.add f[i]
641649
inc i
650+
if i == f.len:
651+
missingCloseChar
642652
if f[i] == closeChar:
643653
inc i
644-
else:
645-
doAssert false, "invalid format string: missing '}'"
646654
result.add newCall(formatSym, res, x, newLit(options))
647655
elif f[i] == closeChar:
648656
if i<f.len-1 and f[i+1] == closeChar:

0 commit comments

Comments
 (0)