|
Message-ID: <20230320121841.GR4163@brightrain.aerifal.cx> Date: Mon, 20 Mar 2023 08:18:42 -0400 From: Rich Felker <dalias@...c.org> To: Bruno Haible <bruno@...sp.org> Cc: musl@...ts.openwall.com Subject: Re: swprintf: minimum width ignored for %lc On Mon, Mar 20, 2023 at 01:29:47AM +0100, Bruno Haible wrote: > On musl-1.2.3 I see this violation of the POSIX specification of swprintf [1]: > > ==================================== foo1.c ==================================== > #include <stdio.h> > #include <wchar.h> > > int main () > { > static wint_t L_x = (wchar_t) 'x'; > wchar_t buf[12] = > { 0xDEADBEEF, 0xDEADBEEF, 0xDEADBEEF, 0xDEADBEEF, 0xDEADBEEF, 0xDEADBEEF, > 0xDEADBEEF, 0xDEADBEEF, 0xDEADBEEF, 0xDEADBEEF, 0xDEADBEEF, 0xDEADBEEF }; > int ret = swprintf (buf, 12, L"%10lc", L_x); > printf ("ret = %d, buf[0] = 0x%x, buf[1] = 0x%x, buf[9] = 0x%x, buf[10] = 0x%x, buf[11] = 0x%x\n", > ret, > (unsigned int) buf[0], (unsigned int) buf[1], > (unsigned int) buf[9], (unsigned int) buf[10], (unsigned int) buf[11]); > return 0; > } > /* > glibc: ret = 10, buf[0] = 0x20, buf[1] = 0x20, buf[9] = 0x78, buf[10] = 0x0, buf[11] = 0xdeadbeef > musl libc: ret = 1, buf[0] = 0x78, buf[1] = 0x0, buf[9] = 0xdeadbeef, buf[10] = 0xdeadbeef, buf[11] = 0xdeadbeef > */ > ================================================================================ > > $ gcc -Wall foo1.c > $ ./a.out > ret = 1, buf[0] = 0x78, buf[1] = 0x0, buf[9] = 0xdeadbeef, buf[10] = 0xdeadbeef, buf[11] = 0xdeadbeef > > The POSIX specification [1] says: > "An optional minimum field width. If the converted value has fewer wide > characters than the field width, it shall be padded with <space> characters > by default on the left; it shall be padded on the right, if the left- > adjustment flag ( '-' ), described below, is given to the field width. The > field width takes the form of an <asterisk> ( '*' ), described below, or a > decimal integer." > > Here, the minimum field width specification of 10 was apparently ignored. Indeed, it's very clear from the code that it was just ignored. This has a simple direct fix. Rich
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.