@cryptotaxi247 / netdata-1 / commits / 1d83fa8f4

fixes identified by coverity

Costa Tsaousis (ktsaou) committed Apr 30, 2017 at 21:41 UTC 1d83fa8f48e3b9f658bfb174dad5956070b3f818
4 files changed +56 -12
src/backends.c
+2 -1
@@ -379,9 +379,10 @@ static inline int process_json_response(BUFFER *b) {
379 // the backend thread
380
381 static inline int backends_can_send_rrdset(uint32_t options, RRDSET *st) {
382 - if(unlikely(!rrdset_is_available_for_backends(st)))
382 + if(unlikely(!rrdset_is_available_for_backends(st))) {
383 debug(D_BACKEND, "BACKEND: not sending chart '%s' of host '%s', because it is not available for backends.", st->id, st->rrdhost->hostname);
384 return 0;
385 + }
386
387 if(unlikely(st->rrd_memory_mode == RRD_MEMORY_MODE_NONE && !(options & BACKEND_SOURCE_DATA_AS_COLLECTED))) {
388 debug(D_BACKEND, "BACKEND: not sending chart '%s' of host '%s' because its memory mode is '%s' and the backend requires database access.", st->id, st->rrdhost->hostname, rrd_memory_mode_name(st->rrdhost->rrd_memory_mode));
src/common.c
+2
@@ -1268,5 +1268,7 @@ int recursively_delete_dir(const char *path, const char *reason) {
1268 else
1269 ret++;
1270
1271 + closedir(dir);
1272 +
1273 return ret;
1274 }
src/plugin_idlejitter.c
+7 -5
@@ -71,11 +71,13 @@ void *cpuidlejitter_main(void *ptr) {
71
72 if(netdata_exit) break;
73
74 - if(likely(counter)) rrdset_next(st);
75 - rrddim_set_by_pointer(st, rd_min, error_min);
76 - rrddim_set_by_pointer(st, rd_max, error_max);
77 - rrddim_set_by_pointer(st, rd_avg, error_total / iterations);
78 - rrdset_done(st);
74 + if(iterations) {
75 + if (likely(counter)) rrdset_next(st);
76 + rrddim_set_by_pointer(st, rd_min, error_min);
77 + rrddim_set_by_pointer(st, rd_max, error_max);
78 + rrddim_set_by_pointer(st, rd_avg, error_total / iterations);
79 + rrdset_done(st);
80 + }
81 }
82
83 info("IDLEJITTER thread exiting");
src/statistical.c
+45 -6
@@ -3,6 +3,12 @@
3 // --------------------------------------------------------------------------------------------------------------------
4
5 long double average(long double *series, size_t entries) {
6 + if(unlikely(entries == 0))
7 + return NAN;
8 +
9 + if(unlikely(entries == 1))
10 + return series[0];
11 +
12 size_t i, count = 0;
13 long double sum = 0;
14
@@ -13,21 +19,33 @@ long double average(long double *series, size_t entries) {
19 sum += value;
20 }
21
22 + if(unlikely(entries == 0))
23 + return NAN;
24 +
25 + if(unlikely(entries == 1))
26 + return sum;
27 +
28 return sum / (long double)count;
29 }
30
31 // --------------------------------------------------------------------------------------------------------------------
32
33 long double moving_average(long double *series, size_t entries, size_t period) {
22 - size_t i, count = 0;
34 + if(unlikely(period <= 0))
35 + return 0.0;
36 +
37 + size_t i, count;
38 long double sum = 0, avg = 0;
39 long double p[period];
40
26 - for(i = 0; i < entries; i++) {
41 + for(count = 0; count < period ; count++)
42 + p[count] = 0.0;
43 +
44 + for(i = 0, count = 0; i < entries; i++) {
45 long double value = series[i];
46 if(unlikely(isnan(value) || isinf(value))) continue;
47
30 - if(count < period) {
48 + if(unlikely(count < period)) {
49 sum += value;
50 avg = (count == period - 1) ? sum / (long double)period : 0;
51 }
@@ -39,6 +57,7 @@ long double moving_average(long double *series, size_t entries, size_t period) {
57 p[count % period] = value;
58 count++;
59 }
60 +
61 return avg;
62 }
63
@@ -155,25 +174,45 @@ long double running_median_estimate(long double *series, size_t entries) {
174 // --------------------------------------------------------------------------------------------------------------------
175
176 long double standard_deviation(long double *series, size_t entries) {
177 + if(unlikely(entries < 1))
178 + return NAN;
179 +
180 + if(unlikely(entries == 1))
181 + return series[0];
182 +
183 size_t i, count = 0;
184 long double sum = 0;
185
186 for(i = 0; i < entries ; i++) {
187 long double value = series[i];
188 if(unlikely(isnan(value) || isinf(value))) continue;
164 - count++;
189
190 + count++;
191 sum += value;
192 }
193 +
194 + if(unlikely(count == 0))
195 + return NAN;
196 +
197 + if(unlikely(count == 1))
198 + return sum;
199 +
200 long double average = sum / (long double)count;
201
202 for(i = 0, count = 0, sum = 0; i < entries ; i++) {
203 long double value = series[i];
204 if(unlikely(isnan(value) || isinf(value))) continue;
173 - count++;
205
206 + count++;
207 sum += powl(value - average, 2);
208 }
209 +
210 + if(unlikely(count == 0))
211 + return NAN;
212 +
213 + if(unlikely(count == 1))
214 + return average;
215 +
216 long double variance = sum / (long double)(count - 1); // remove -1 to have a population stddev
217
218 long double stddev = sqrtl(variance);
@@ -359,7 +398,7 @@ long double holtwinters(long double *series, size_t entries, long double alpha,
398 long double b0 = 0;
399 long double s[] = {};
400
362 - long double errors;
401 + long double errors = 0.0;
402 size_t nb_computations = entries;
403 long double *estimated_level = callocz(nb_computations, sizeof(long double));
404 long double *estimated_trend = callocz(nb_computations, sizeof(long double));