From 34f88528edba44b2703ba8c772bef077eca33dab Mon Sep 17 00:00:00 2001 From: Jose Luis Duran Date: Fri, 21 Oct 2022 16:34:09 -0300 Subject: [PATCH] strfmon: Fix formatting of a second fixed-width value There is a bug when formatting two consecutive values using fixed-widths and the values need padding. This was because the value of pad_size was zeroed only every other time. Format Before After [%8n] [%8n] [ $123.45] [ $123.45] [ $123.45] [ $123.45] Reviewed by: kib PR: 267282 Github PR: #619 MFC after: 1 week --- lib/libc/stdlib/strfmon.c | 2 +- lib/libc/tests/stdlib/strfmon_test.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/libc/stdlib/strfmon.c b/lib/libc/stdlib/strfmon.c index d453b7a3943b..c0579f31e821 100644 --- a/lib/libc/stdlib/strfmon.c +++ b/lib/libc/stdlib/strfmon.c @@ -135,7 +135,6 @@ vstrfmon_l(char * __restrict s, size_t maxsize, locale_t loc, fmt = format; asciivalue = NULL; currency_symbol = NULL; - pad_size = 0; while (*fmt) { /* pass nonformating characters AS IS */ @@ -155,6 +154,7 @@ vstrfmon_l(char * __restrict s, size_t maxsize, locale_t loc, /* set up initial values */ flags = (NEED_GROUPING|LOCALE_POSN); pad_char = ' '; /* padding character is "space" */ + pad_size = 0; /* no padding initially */ left_prec = -1; /* no left precision specified */ right_prec = -1; /* no right precision specified */ width = -1; /* no width specified */ diff --git a/lib/libc/tests/stdlib/strfmon_test.c b/lib/libc/tests/stdlib/strfmon_test.c index 664d1811dc46..d8e4f478547a 100644 --- a/lib/libc/tests/stdlib/strfmon_test.c +++ b/lib/libc/tests/stdlib/strfmon_test.c @@ -74,7 +74,7 @@ ATF_TC_BODY(strfmon_examples, tc) const char *expected; } tests[] = { { "%n", "[$123.45] [-$123.45] [$3,456.78]" }, - { "%11n", "[ $123.45] [ -$123.45] [ $3,456.78]" }, /* XXX */ + { "%11n", "[ $123.45] [ -$123.45] [ $3,456.78]" }, { "%#5n", "[ $ 123.45] [-$ 123.45] [ $ 3,456.78]" }, { "%=*#5n", "[ $***123.45] [-$***123.45] [ $*3,456.78]" }, { "%=0#5n", "[ $000123.45] [-$000123.45] [ $03,456.78]" },