From: Jeremy Harris Date: Thu, 5 Oct 2017 20:54:28 +0000 (+0100) Subject: Fix debug output for NULL pointers on FreeBSD. X-Git-Tag: exim-4_90_RC1~54 X-Git-Url: https://git.exim.org/exim.git/commitdiff_plain/2e8db779f9d0753bd1f235e1d3d6ae27cecfd7d2 Fix debug output for NULL pointers on FreeBSD. The testsuite had failures, mostly in DB opens finding no existing file, where debug output to stderr showed "0xAAAAAAAA" rather than "(nil)". Code it explicitly, at least in %p handling, rather than relying on sprintf() bevahiour. --- diff --git a/src/src/string.c b/src/src/string.c index 2de595afb..3857e1120 100644 --- a/src/src/string.c +++ b/src/src/string.c @@ -1363,10 +1363,20 @@ while (*fp != 0) break; case 'p': - if (p >= last - 24) { yield = FALSE; goto END_FORMAT; } - strncpy(newformat, item_start, fp - item_start); - newformat[fp - item_start] = 0; - p += sprintf(CS p, newformat, va_arg(ap, void *)); + { + void * ptr; + if (p >= last - 24) { yield = FALSE; goto END_FORMAT; } + /* sprintf() saying "(nil)" for a null pointer doesn't work + on FreeBSD; we get "0xAAAAAAAA". Handle it explicitly. */ + if ((ptr = va_arg(ap, void *))) + { + strncpy(newformat, item_start, fp - item_start); + newformat[fp - item_start] = 0; + p += sprintf(CS p, newformat, va_arg(ap, void *)); + } + else + p += sprintf(CS p, "(nil)"); + } break; /* %f format is inherently insecure if the numbers that it may be