From 793db3bc5073083e223d084437c6e751d422416d Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Wed, 7 Mar 2007 10:00:14 +0000 Subject: r21740: this fixes the real cause of the large log files we had. The problem was we were not checking the result of a convert_string() call, and it was giving -1. We then passed -1 to fwrite() on stdout, which on aix and macosx wrote all of available memory to stdout :) To fix this, replace non-printing chars with ? in d_printf if the string cannot be converted (This used to be commit d20102d363f4b9214e29296ad8ec45c8d95614b5) --- source4/lib/util/dprintf.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'source4/lib/util') diff --git a/source4/lib/util/dprintf.c b/source4/lib/util/dprintf.c index 79b90ec3e1..209fb8da36 100644 --- a/source4/lib/util/dprintf.c +++ b/source4/lib/util/dprintf.c @@ -30,6 +30,7 @@ */ #include "includes.h" +#include "system/locale.h" _PUBLIC_ int d_vfprintf(FILE *f, const char *format, va_list ap) _PRINTF_ATTRIBUTE(2,0) { @@ -54,6 +55,22 @@ again: return -1; } clen = convert_string(CH_UNIX, CH_DISPLAY, p, ret, p2, maxlen); + if (clen == -1) { + /* the string can't be converted - do the best we can, + filling in non-printing chars with '?' */ + int i; + for (i=0;i= maxlen) { /* it didn't fit - try a larger buffer */ -- cgit