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));