Code

src/utils_cache.c: Fix two memory leaks.
authorFlorian Forster <octo@collectd.org>
Fri, 19 Jun 2015 05:05:22 +0000 (07:05 +0200)
committerFlorian Forster <octo@collectd.org>
Fri, 19 Jun 2015 05:11:04 +0000 (07:11 +0200)
* Free "times" pointer if it is not returned to the user.
* Free (re)alloc'ed pointers when strdup() fails.

src/utils_cache.c

index e77f9942c8ffe5273f55744e53a2513e5df22a77..dc0ff0df27b33f21d5f3701c2d18648ae35a8ce6 100644 (file)
@@ -296,7 +296,13 @@ int uc_check_timeout (void)
   pthread_mutex_unlock (&cache_lock);
 
   if (keys_len == 0)
+  {
+    /* realloc() may have been called for these. */
+    sfree (keys);
+    sfree (keys_time);
+    sfree (keys_interval);
     return (0);
+  }
 
   /* Call the "missing" callback for each value. Do this before removing the
    * value from the cache, so that callbacks can still access the data stored,
@@ -643,6 +649,8 @@ int uc_get_names (char ***ret_names, cdtime_t **ret_times, size_t *ret_number)
   *ret_names = names;
   if (ret_times != NULL)
     *ret_times = times;
+  else
+    sfree (times);
   *ret_number = number;
 
   return (0);