From: Rich Felker Date: Sat, 15 Nov 2014 17:16:19 +0000 (-0500) Subject: fix behavior of printf with alt-form octal, zero precision, zero value X-Git-Tag: v1.0.5~21 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=395e409cc0b89faeaae8d701a18105d020f7aade;p=oweals%2Fmusl.git fix behavior of printf with alt-form octal, zero precision, zero value in this case there are two conflicting rules in play: that an explicit precision of zero with the value zero produces no output, and that the '#' modifier for octal increases the precision sufficiently to yield a leading zero. ISO C (7.19.6.1 paragraph 6 in C99+TC3) includes a parenthetical remark to clarify that the precision-increasing behavior takes precedence, but the corresponding text in POSIX off of which I based the implementation is missing this remark. this issue was covered in WG14 DR#151. (cherry picked from commit b91cdbe2bc8b626aa04dc6e3e84345accf34e4b1) --- diff --git a/src/stdio/vfprintf.c b/src/stdio/vfprintf.c index f6e7f38d..9f02f743 100644 --- a/src/stdio/vfprintf.c +++ b/src/stdio/vfprintf.c @@ -572,7 +572,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) && arg.i) prefix+=5, pl=1; + if ((fl&ALT_FORM) && p