UB status of snprintf on invalid ptr+size combination?
Vincent Lefevre
vincent@vinc17.net
Sun Mar 19 23:07:22 GMT 2023
On 2023-03-19 10:45:59 -0400, manfred via Libc-alpha wrote:
> All of that said, back to the OP case I would not pass INT_MAX to snprintf.
> If I have a situation wherein I know that the buffer is large enough, but I
> don't know its exact size, I'd use sprintf and be done with it. (I'm sure
> that the actual code is more elaborate than this, but still)
In simple code, probably. But in actual code, it may be more natural
to use snprintf. Something like that:
snprintf(buf, checked ? SIZE_MAX : n, "%s", s);
The function may not know the buffer size if `checked` is true,
so that it uses a known bound. Thanks to common code factorized,
this is more readable than
if (checked)
sprintf (buf, "%s", s);
else
snprintf(buf, n, "%s", s);
in particular in the cases where the format string is complex.
--
Vincent Lefèvre <vincent@vinc17.net> - Web: <https://www.vinc17.net/>
100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/>
Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon)
More information about the Libc-alpha
mailing list