Hi Tobi, Florian,
On Thu, Feb 12, 2009 at 03:35:05PM +0100, Florian Forster wrote:
> Please note, that error checking with
> if (strerror_r (...)) { ... }
> is problematic for portability: Some systems (the GNU libc, unless given
> _XOPEN_SOURCE=600, for example) export a version of `strerror_r' that
> returns a pointer to the buffer it just filled, so it can be used just
> like `strerror'. On such systems the block will always be executed
> *except* when an error occurred.Unfortunately, it's even worse than that. The GNU version of strerror_r might not even return a pointer to the user provided buffer (the second argument to strerror_r) but possibly some pointer to some static string. So, even if the error checking was correct, an empty string or garbage might have been returned from rrd_strerror when returning ctx->lib_errstr in that case. The latter case might even cause segfaults if no '\0' appears in the garbage. autoconf provides a macro to check for the type of the return value of strerror_r. At runtime, we need to check which string to return (either the return value of strerror_r or the user provided buffer). The patch that I'm going to provide in a second tries hard to handle all possible cases. It's derived from the implementation that Florian and I came up with in collectd over the time (there have been around O(4) [*scnr*] commits until we caught [hopefully] every possibly case). Cheers, Sebastian -- Sebastian "tokkee" Harl +++ GnuPG-ID: 0x8501C7FC +++ http://tokkee.org/ Those who would give up Essential Liberty to purchase a little Temporary Safety, deserve neither Liberty nor Safety. -- Benjamin Franklin
signature.asc
Description: Digital signature
_______________________________________________ rrd-developers mailing list [email protected] https://lists.oetiker.ch/cgi-bin/listinfo/rrd-developers
