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://vcs.fsf.org/?a=commitdiff_plain;h=2e8db779f9d0753bd1f235e1d3d6ae27cecfd7d2;p=exim.git 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