redesign snprintf without undefined behavior
authorRich Felker <dalias@aerifal.cx>
Sat, 22 Oct 2016 00:57:15 +0000 (20:57 -0400)
committerRich Felker <dalias@aerifal.cx>
Sat, 22 Oct 2016 02:15:31 +0000 (22:15 -0400)
commited8696742504b6182954254e78ec123c8bcd8d3b
treec48f0867c50e5c1ef2b0104d3d63d675fa29c22c
parent7597fc25a2743d49500926a286da71f8e033936c
redesign snprintf without undefined behavior

the old snprintf design setup the FILE buffer pointers to point
directly into the destination buffer; if n was actually larger than
the buffer size, the pointer arithmetic to compute the buffer end
pointer was undefined. this affected sprintf, which is implemented in
terms of snprintf, as well as some unusual but valid direct uses of
snprintf.

instead, setup the FILE as unbuffered and have its write function
memcpy to the destination. the printf core sets up its own temporary
buffer for unbuffered streams.
src/stdio/vsnprintf.c