From: Rich Felker Date: Thu, 11 Jan 2018 01:45:02 +0000 (-0500) Subject: fix printf alt-form octal with value 0 and no explicit precision X-Git-Tag: v1.1.19~21 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=b64539ae06aa91a407359238f4e909adb9bfab3d;p=oweals%2Fmusl.git fix printf alt-form octal with value 0 and no explicit precision commit 78897b0dc00b7cd5c29af5e0b7eebf2396d8dce0 wrongly simplified Dmitry Levin's original submitted patch fixing alt-form octal with the zero flag and field width present, omitting the special case where the value is zero. as a result, printf("%#o",0) wrongly prints "00" rather than "0". the logic prior to this commit was actually better, in that it was aligned with how the alt-form flag (#) for printf is specified ("it shall increase the precision"). at the time there was no good way to avoid the zero flag issue with the old logic, but commit 167dfe9672c116b315e72e57a55c7769f180dffa added tracking of whether an explicit precision was provided. revert commit 78897b0dc00b7cd5c29af5e0b7eebf2396d8dce0 and switch to using the explicit precision indicator for suppressing the zero flag. --- diff --git a/src/stdio/vfprintf.c b/src/stdio/vfprintf.c index 15356f53..50fb55c1 100644 --- a/src/stdio/vfprintf.c +++ b/src/stdio/vfprintf.c @@ -559,7 +559,7 @@ static int printf_core(FILE *f, const char *fmt, va_list *ap, union arg *nl_arg, if (0) { case 'o': a = fmt_o(arg.i, z); - if ((fl&ALT_FORM) && p=0) fl &= ~ZERO_PAD; + if (xp) fl &= ~ZERO_PAD; if (!arg.i && !p) { a=z; break;