Truncate strjoin arguments if > DATA_MAX_NAME_LEN
authorJohn Conroy <john.conroy@interoptechnologies.com>
Wed, 13 Jul 2016 21:03:11 +0000 (17:03 -0400)
committerJohn Conroy <john.conroy@interoptechnologies.com>
Mon, 12 Sep 2016 18:34:26 +0000 (14:34 -0400)
If strjoin() runs out of buffer space when joining strings, use the
remainder of available space rather than skipping additional strings

Reworked return() to avoid extra strlen() call

src/daemon/common.c

index 05b1199..d1d8bf1 100644 (file)
@@ -366,10 +366,12 @@ int strjoin (char *buffer, size_t buffer_size,
                        ptr += sep_len;
                        avail -= sep_len;
                }
+               if (avail == 0)
+                       return (-1);
 
                field_len = strlen (fields[i]);
                if (avail < field_len)
-                       return (-1);
+                       field_len = avail;
 
                memcpy (ptr, fields[i], field_len);
                ptr += field_len;
@@ -377,7 +379,7 @@ int strjoin (char *buffer, size_t buffer_size,
        }
 
        assert (buffer[buffer_size - 1] == 0);
-       return ((int) strlen (buffer));
+       return ((int) ((buffer_size - 1) - avail));
 }
 
 int escape_string (char *buffer, size_t buffer_size)