diff options
author | Andrew Tridgell <tridge@samba.org> | 2007-03-07 10:00:14 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 14:49:21 -0500 |
commit | 793db3bc5073083e223d084437c6e751d422416d (patch) | |
tree | 3ea2e4896e4e1b7e2b7d76f1632434f7a51b4cc2 /source4/lib/util | |
parent | 41a72a506fce51737992c8ea3201ef35dcafd73a (diff) | |
download | samba-793db3bc5073083e223d084437c6e751d422416d.tar.gz samba-793db3bc5073083e223d084437c6e751d422416d.tar.bz2 samba-793db3bc5073083e223d084437c6e751d422416d.zip |
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)
Diffstat (limited to 'source4/lib/util')
-rw-r--r-- | source4/lib/util/dprintf.c | 17 |
1 files changed, 17 insertions, 0 deletions
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<ret;i++) { + if (isprint(p[i]) || isspace(p[i])) { + fwrite(p+i, 1, 1, f); + } else { + fwrite("?", 1, 1, f); + } + } + SAFE_FREE(p); + SAFE_FREE(p2); + return ret; + } + if (clen >= maxlen) { /* it didn't fit - try a larger buffer */ |