[Xymon] rrd logs and graphs

Jeremy Laidman jlaidman at rebel-it.com.au
Wed Mar 11 07:50:05 CET 2015


Yes, apparently, "(null)" is what GNU's printf outputs when asked to print
a string pointer that is null.  The POSIX behaviour is not defined, and so
in some systems, it dumps core rather than detecting the illegal string.

This bit of code demonstrates:

#include <stdio.h>
int main() {
        printf("test: %s\n",NULL);
}

On Linux and FreeBSD, this prints out "test: (null)" but on Solaris 10 this
dumps core.

Fixing this is beyond my skill level.  But I would start looking at the
functions errprintf() and dbgprintf() to see if NULL strings can be
detected and prevented from being passed through to *printf.

But that might be somewhat tricky.  Alternatively, updating
dump_tcp_services() to do the same, is probably a much simpler task, but
doesn't safeguard any other code from the same fate.

J


On 11 March 2015 at 17:38, Jeremy Laidman <jlaidman at rebel-it.com.au> wrote:

> Even simpler:
>
> #include <stdio.h>
> int main() {
>         printf("test: %s\n",NULL);
> }
>
>
>
> On 11 March 2015 at 17:33, Jeremy Laidman <jlaidman at rebel-it.com.au>
> wrote:
>
>> On 11 March 2015 at 15:43, Vernon Everett <everett.vernon at gmail.com>
>> wrote:
>>
>>> We have 4.3.12
>>> And the command dumps core in the same way.
>>>
>>
>> That's good.
>>
>> Can you try this out?  Plop into a text file, eg test.c, then "make test"
>> and then "./test".
>>
>> #include <stdio.h>
>> #include <stdarg.h>
>> void dbgprintf(const char *fmt, ...)
>> {
>>         va_list args;
>>         va_start(args, fmt);
>>         vfprintf(stdout, fmt, args);
>>         va_end(args);
>>         fflush(stdout);
>> }
>> int main() {
>>         dbgprintf("test: %s\n",NULL);
>> }
>>
>> This is the essence of the Xymon code that prints the empty send/expect
>> strings.  But I've pared away all of the Xymon code to leave just the call
>> to vprintf() and whatever is needed to make it run.
>>
>> On my systems I get the following output:
>>
>> test: (null)
>>
>> I'm guessing on your system you'll get a core dump.  If so, it would
>> suggest a difference in implementations of the standard library functions.
>> If that's the case, we simply (!) need to catch the attempts to print NULL
>> pointers, and substitute our own "(null)" string.
>>
>> Indeed, I just tested this on a Solaris system and it dumped core.  On
>> Linux and FreeBSD systems, it printed "(null)".
>>
>> J
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.xymon.com/pipermail/xymon/attachments/20150311/2f53baf1/attachment.html>


More information about the Xymon mailing list