From: Barbara Kaczorowska Date: Wed, 19 Aug 2020 08:19:22 +0000 (+0000) Subject: Fix seg fault in tests X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4fc96f98ebfd7b652d6cda26140b38eb30928e46;p=thirdparty%2Fcollectd.git Fix seg fault in tests --- diff --git a/src/daemon/utils_cache.c b/src/daemon/utils_cache.c index e1e56e1c7..d8f95694a 100644 --- a/src/daemon/utils_cache.c +++ b/src/daemon/utils_cache.c @@ -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); diff --git a/src/daemon/utils_cache_test.c b/src/daemon/utils_cache_test.c index 664c8ef0b..4b8ff2ab4 100644 --- a/src/daemon/utils_cache_test.c +++ b/src/daemon/utils_cache_test.c @@ -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; }