[cairo] [PATCH] boilerplate: Add xsprintf() and xsnprintf()

Bill Spitzak spitzak at gmail.com
Wed Oct 22 11:25:08 PDT 2014


Passing NULL for an *output* buffer can be considered programmer error, 
and I would prefer it segfault at this point rather than call exit and 
lose the stack trace.

If they are calling malloc to make the buffer then they should be 
calling the xmalloc instead which exits, thus reproducing this result 
but with a correct out-of-memory error. Any other method of making the 
buffer pointer will be extracting the pointer from another pointed-to 
structure and thus any error will segfault before calling this, or pass 
a small offset from zero that this code does not detect anyway.

And I strongly suspect the error result of snprintf is never produced. 
That is for reporting errors from the flush of output streams.

I think this is useless code similar to the _s crap that Microsoft 
foisted on the C standard in an effort to make C non-portable, and 
should not be added.

Any effort here would be better spent changing all sprintf to snprintf 
and replacing strdup and strcat with strldup and strlcat,

If there is a worry about NULL string pointers you should be fixing 
functions that take *input* strings and make them do some expected 
result when passed NULL, such as treat it the same as "". This would fix 
actual bugs and crashes.

On 10/21/2014 10:13 PM, RAVI NANJUNDAPPA wrote:
> (formatting was the problem with the earlier mail. Pls ignore that mail.)
> Agreed. But we need to check for other conditions like if the user is passing NULL string value or not (as it's been done in xstrdup())
> In which case also, we need to exit from the execution environment.
>
> Thanks and Best Regards,
> N Ravi


More information about the cairo mailing list