util/u_printf: do not double print format string with unused arugments

the CL CTS added a new test being printf("\n", "foo"), but we ended up
printing the new line twice. If we can't find a specifier anymore, ignore
the argument as after the loop processing all arguments we'll print the
remaining format string anyway.

Cc: mesa-stable
Reviewed-by: Jesse Natalie <jenatali@microsoft.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30574>
This commit is contained in:
Karol Herbst 2024-08-08 19:21:54 +02:00 committed by Marge Bot
parent f7830e0c80
commit 4080269845

View file

@ -166,10 +166,9 @@ u_printf_impl(FILE *out, const char *buffer, size_t buffer_size,
int arg_size = fmt->arg_sizes[i];
size_t spec_pos = util_printf_next_spec_pos(format, 0);
if (spec_pos == -1) {
u_printf_plain(out, format);
continue;
}
/* If we hit an unused argument we skip all remaining ones */
if (spec_pos == -1)
break;
const char *token = util_printf_prev_tok(&format[spec_pos]);
const char *next_format = &format[spec_pos + 1];