]> source.dussan.org Git - rspamd.git/commitdiff
[Minor] Tune printf for hex and base32 input strings
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Wed, 31 Aug 2016 14:33:58 +0000 (15:33 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Wed, 31 Aug 2016 14:33:58 +0000 (15:33 +0100)
src/libutil/printf.c

index 10dc899ba07576f6c83b770dbb7fedb9163e42c4..db21346ea18f83a939257fa7e249081638f1c6aa 100644 (file)
@@ -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':