Merge branch 'collectd-5.5'
[collectd.git] / src / rrdtool.c
index 26d1638..fd5fb56 100644 (file)
@@ -1008,23 +1008,36 @@ static int rrd_config (const char *key, const char *value)
        }
        else if (strcasecmp ("DataDir", key) == 0)
        {
-               if (datadir != NULL)
-                       free (datadir);
-               datadir = strdup (value);
+               char *tmp;
+               size_t len;
+
+               tmp = strdup (value);
+               if (tmp == NULL)
+               {
+                       ERROR ("rrdtool plugin: strdup failed.");
+                       return (1);
+               }
+
+               len = strlen (tmp);
+               while ((len > 0) && (tmp[len - 1] == '/'))
+               {
+                       len--;
+                       tmp[len] = 0;
+               }
+
+               if (len == 0)
+               {
+                       ERROR ("rrdtool plugin: Invalid \"DataDir\" option.");
+                       sfree (tmp);
+                       return (1);
+               }
+
                if (datadir != NULL)
                {
-                       int len = strlen (datadir);
-                       while ((len > 0) && (datadir[len - 1] == '/'))
-                       {
-                               len--;
-                               datadir[len] = '\0';
-                       }
-                       if (len <= 0)
-                       {
-                               free (datadir);
-                               datadir = NULL;
-                       }
+                       sfree (datadir);
                }
+
+               datadir = tmp;
        }
        else if (strcasecmp ("StepSize", key) == 0)
        {