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