Fix dynamic named arg format spec handling (#4361)

When dealing with dynamic named format args, need to account for
nested named args when skipping the content of the replacement.

Fixes #4360
This commit is contained in:
Dean Glazeski
2025-03-15 09:34:11 -07:00
committed by GitHub
parent 77c0fc07d9
commit 37e6474718
2 changed files with 15 additions and 1 deletions
+13 -1
View File
@@ -1718,7 +1718,19 @@ class format_string_checker {
-> const Char* {
context_.advance_to(begin);
if (id >= 0 && id < NUM_ARGS) return parse_funcs_[id](context_);
while (begin != end && *begin != '}') ++begin;
// If id is out of range, it means we do not know the type and cannot parse
// the format at compile time. Instead, skip over content until we finish
// the format spec, accounting for any nested replacements.
auto bracket_count = 0;
while (begin != end && (bracket_count > 0 || *begin != '}')) {
if (*begin == '{')
++bracket_count;
else if (*begin == '}')
--bracket_count;
++begin;
}
return begin;
}