From 9725eabe49d312239df1047176bd175150260d6e Mon Sep 17 00:00:00 2001 From: Johannes Schindelin Date: Sat, 11 Nov 2023 22:53:33 +0100 Subject: [PATCH] vasnprintf: Re-enable parsing of directive with I64 (regr. 2023-03-24). In 480a59ba60 (*printf-posix: ISO C 23: Support size specifiers 'wN' and 'wfN'., 2023-03-24), a major refactoring hides a bug in the conversion of the code handling Windows' "%I64*" family of printf() formats: before the refactoring, the "64" part was skipped (as desired), but afterwards that part is not skipped and therefore the '6' is mistaken for a conversion character. Which is invalid, of course, causing the code to error out. Fix this by skipping the "64" part again. This bug was uncovered by the Git for Windows project when gettext v0.22.3 switched to the gnulib code as work horse of the libintl_vsnprintf() function. * lib/printf-parse.c (PRINTF_PARSE): When parsing a size specifier "I64", increment cp by 3, not 1. Signed-off-by: Johannes Schindelin Copyright-paperwork-exempt: Yes --- ChangeLog | 6 ++++++ lib/printf-parse.c | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index ec97c989b8..31f49bef69 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2023-11-11 Johannes Schindelin + + vasnprintf: Re-enable parsing of directive with I64 (regr. 2023-03-24). + * lib/printf-parse.c (PRINTF_PARSE): When parsing a size specifier + "I64", increment cp by 3, not 1. + 2023-11-10 Bruno Haible tests: In multithreaded tests, use random() instead of rand(). diff --git a/lib/printf-parse.c b/lib/printf-parse.c index d3f2c3cb5d..6741ee5ff4 100644 --- a/lib/printf-parse.c +++ b/lib/printf-parse.c @@ -555,7 +555,7 @@ PRINTF_PARSE (const CHAR_T *format, DIRECTIVES *d, arguments *a) unsigned_type = TYPE_ULONGINT; pointer_type = TYPE_COUNT_LONGINT_POINTER; } - cp++; + cp += 3; } #endif -- 2.39.5