X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Frrdtool.c;h=fd5fb56334346e406b7a1747b5e41ab2459f7722;hb=5c2993e4121feae745551be182221b31bc23ff97;hp=9b5723ad2992c4d3cdcaa448c9462afead768866;hpb=f701e685eab83f37ecc6501d7dbe4eb941a454bb;p=collectd.git diff --git a/src/rrdtool.c b/src/rrdtool.c index 9b5723ad..fd5fb563 100644 --- a/src/rrdtool.c +++ b/src/rrdtool.c @@ -204,7 +204,7 @@ static int value_list_to_string_multiple (char *buffer, int buffer_len, int offset; int status; time_t tt; - int i; + size_t i; memset (buffer, '\0', buffer_len); @@ -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) {