strjoin(): Fix behavior if output buffer is NULL.
authorFlorian Forster <octo@collectd.org>
Thu, 7 Feb 2019 10:33:16 +0000 (11:33 +0100)
committerFlorian Forster <octo@collectd.org>
Thu, 7 Feb 2019 10:39:29 +0000 (11:39 +0100)
Additionally, test the (NULL, 0) output buffer for all test cases rather
than an individual, isolated test case.

Fixes: #3062

src/daemon/common.c
src/daemon/common_test.c

index ec5c7ab..8502208 100644 (file)
@@ -352,6 +352,9 @@ int strjoin(char *buffer, size_t buffer_size, char **fields, size_t fields_num,
       buffer_req += sep_len;
     buffer_req += field_len;
 
+    if (buffer_size == 0)
+      continue;
+
     if ((i != 0) && (sep_len > 0)) {
       if (sep_len >= avail) {
         /* prevent subsequent iterations from writing to the
index 0c96945..7a9f914 100644 (file)
@@ -185,10 +185,12 @@ DEF_TEST(strjoin) {
                      cases[i].fields_num, cases[i].separator);
     EXPECT_EQ_INT(cases[i].want_return, status);
     EXPECT_EQ_STR(cases[i].want_buffer, buffer);
-  }
 
-  /* use (NULL, 0) to determine required buffer size. */
-  EXPECT_EQ_INT(3, strjoin(NULL, 0, (char *[]){"a", "b"}, 2, "-"));
+    /* use (NULL, 0) to determine required buffer size. */
+    EXPECT_EQ_INT(cases[i].want_return,
+                  strjoin(NULL, 0, cases[i].fields, cases[i].fields_num,
+                          cases[i].separator));
+  }
 
   return (0);
 }