]> git.ipfire.org Git - thirdparty/collectd.git/commitdiff
Fix seg fault in tests
authorBarbara Kaczorowska <bkjg@google.com>
Wed, 19 Aug 2020 08:19:22 +0000 (08:19 +0000)
committerBarbara Kaczorowska <bkjg@google.com>
Wed, 19 Aug 2020 08:19:22 +0000 (08:19 +0000)
src/daemon/utils_cache.c
src/daemon/utils_cache_test.c

index e1e56e1c76e3eac83de9548bd283cdff049ba982..d8f95694a1742860b4abf672443ecd802b5bb669 100644 (file)
@@ -447,6 +447,11 @@ int uc_set_callbacks_mask(const char *name, unsigned long mask) {
 
 int uc_get_percentile_by_name(const char *name, gauge_t *ret_values,
                               double percent) {
+  if (name == NULL || ret_values == NULL) {
+    ERROR("uc_get_percentile_by_name: Passed null pointer as an argument.");
+    return -1;
+  }
+
   if (percent < 0 || percent > 100) {
     ERROR("uc_get_percentile_by_name: Illegal percent %lf.", percent);
     return -1;
@@ -490,6 +495,11 @@ int uc_get_percentile_by_name(const char *name, gauge_t *ret_values,
 } /* gauge_t *uc_get_percentile_by_name */
 
 int uc_get_percentile(metric_t const *m, gauge_t *ret, double percent) {
+  if (m == NULL || ret == NULL) {
+    ERROR("uc_get_percentile: Passed null pointer as an argument.");
+    return -1;
+  }
+
   if (m->family->type != METRIC_TYPE_DISTRIBUTION) {
     ERROR("uc_get_percentile: Don't know how to handle data source type %i.",
           m->family->type);
index 664c8ef0b117703d587c648b95f2e3a6c96ccc1f..4b8ff2ab47e154705e7394dbe22d4118e880e53a 100644 (file)
@@ -547,7 +547,6 @@ DEF_TEST(uc_get_percentile_by_name) {
         }
       }
     }
-    /* TODO(bkjg): add test, where fam will be NULL */
 
     CHECK_ZERO(uc_update(cases[i].fam));
 
@@ -568,6 +567,10 @@ DEF_TEST(uc_get_percentile_by_name) {
 }
 
 DEF_TEST(uc_get_percentile) {
+  metric_family_t *metric_family_with_null_metric = calloc(1, sizeof(metric_family_t));
+  metric_family_with_null_metric->type = METRIC_TYPE_COUNTER;
+  metric_family_with_null_metric->name = "test-percentile-with-null";
+
   double tmp;
   struct {
     int want_get;
@@ -645,7 +648,7 @@ DEF_TEST(uc_get_percentile) {
                   (double[]){83.4653, 943.463, 573.543, 90.543},
               },
           .want_ret_value = 84.543,
-          .metric_idx = 35,
+          .metric_idx = 5,
       },
       {
           .fam = create_metric_family_for_test5("test8-percentile", 7, 24,
@@ -758,8 +761,12 @@ DEF_TEST(uc_get_percentile) {
                              5236.74648},
               },
           .want_ret_value = 5579.60919,
-          .metric_idx = 48,
+          .metric_idx = 3,
       },
+      {
+        .fam = metric_family_with_null_metric,
+        .want_get = -1,
+      }
   };
 
   /* TODO(bkjg): add test cases to the uc_update function that will give an
@@ -779,8 +786,9 @@ DEF_TEST(uc_get_percentile) {
 
     CHECK_ZERO(uc_update(cases[i].fam));
 
+    printf("num: %lu\n", cases[i].fam->metric.num);
     EXPECT_EQ_INT(cases[i].want_get,
-                  uc_get_percentile(&cases[i].fam->metric.ptr[0],
+                  uc_get_percentile(&cases[i].fam->metric.ptr[cases[i].metric_idx],
                                     &cases[i].ret_value, cases[i].percent));
 
     if (cases[i].want_get != -1) {
@@ -789,9 +797,9 @@ DEF_TEST(uc_get_percentile) {
 
     CHECK_ZERO(metric_family_metric_reset(cases[i].fam));
     free(cases[i].fam);
+    printf("after free\n");
   }
   // reset_cache_tree();
-
   return 0;
 }