From: Vsevolod Stakhov Date: Wed, 31 Aug 2016 14:33:58 +0000 (+0100) Subject: [Minor] Tune printf for hex and base32 input strings X-Git-Tag: 1.4.0~512 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=afb5308643e8c0c822b96df03d5a0b69a96c6d37;p=thirdparty%2Frspamd.git [Minor] Tune printf for hex and base32 input strings --- diff --git a/src/libutil/printf.c b/src/libutil/printf.c index 10dc899ba0..db21346ea1 100644 --- a/src/libutil/printf.c +++ b/src/libutil/printf.c @@ -579,28 +579,42 @@ rspamd_vprintf_common (rspamd_printf_append_func func, p = "(NULL)"; } - if (slen == -1) { - /* NULL terminated string */ - slen = strlen (p); - } - - if (G_UNLIKELY (width != 0)) { - slen = MIN (slen, width); - } - if (G_UNLIKELY (b32)) { gchar *b32buf; + if (G_UNLIKELY (slen == -1)) { + if (G_LIKELY (width != 0)) { + slen = width; + } + else { + /* NULL terminated string */ + slen = strlen (p); + } + } + b32buf = rspamd_encode_base32 (p, slen); if (b32buf) { RSPAMD_PRINTF_APPEND (b32buf, strlen (b32buf)); g_free (b32buf); } + else { + RSPAMD_PRINTF_APPEND ("(NULL)", sizeof ("(NULL)") - 1); + } } else if (G_UNLIKELY (hex)) { gchar hexbuf[2]; + if (G_UNLIKELY (slen == -1)) { + if (G_LIKELY (width != 0)) { + slen = width; + } + else { + /* NULL terminated string */ + slen = strlen (p); + } + } + while (slen) { hexbuf[0] = hex == 2 ? _HEX[(*p >> 4) & 0xf] : _hex[(*p >> 4) & 0xf]; @@ -609,15 +623,24 @@ rspamd_vprintf_common (rspamd_printf_append_func func, p++; slen--; } + fmt++; buf_start = fmt; } else { + if (slen == -1) { + /* NULL terminated string */ + slen = strlen (p); + } + + if (G_UNLIKELY (width != 0)) { + slen = MIN (slen, width); + } + RSPAMD_PRINTF_APPEND (p, slen); } - continue; case 'O':