From: Bartosz Golaszewski
Sent: 22 October 2024 08:30
On Tue, Oct 22, 2024 at 9:15 AM Jiri Slaby jirislaby@kernel.org wrote:
On 21. 10. 24, 12:04, Bartosz Golaszewski wrote:
From: Bartosz Golaszewski bartosz.golaszewski@linaro.org
The output of ".%03u" with the unsigned int in range [0, 4294966295] may get truncated if the target buffer is not 12 bytes.
Perhaps, if you elaborate on how 'remainder' can become > 999?
Yeah, I guess it can't. Not sure what we do about such false positives, do we have some common way to suppress them?
The only way I've found is to 'launder' the buffer size using OPTIMISER_HIDE_VAR(). Although I can imagine an update to gcc that checks sizeof (buffer) as well - so that would also need laundering.
You actually want: #define OPTIMER_HIDE_VAL(x) \ ({ __auto_type _x = x; OPTIMER_HIDE_VAR(_x); _x;}) so you can do: snprintf(OPTIMISER_HIDE_VAL(buffer), OPTOMISER_HIDE_VAL(sizeof buffer), fmt, ...)
Perhaps that could be snprint_truncate() ?
David
- Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK Registration No: 1397386 (Wales)