blob: 3a093028da16339dfaf918b9fbd484590b9b82de (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
Fix UB when calculating median of all-NaN values
Corresponds to upstream commit 1d700bf
https://github.com/oetiker/rrdtool-1.x/commit/1d700bf3ba13a75b91047e6e979231abd755892b
--- src/rrd_rpncalc.c.orig 2019-05-27 18:48:09 UTC
+++ src/rrd_rpncalc.c
@@ -1197,15 +1197,16 @@ short rpn_calc(
}
}
+ /* when goodvals and badvals meet, they might have met on a
+ * NAN, which wouldn't decrease final_elements. so, check
+ * that now. */
+ if (isnan(*goodvals)) --final_elements;
+
stptr -= elements;
if (!final_elements) {
/* no non-NAN elements; push NAN */
rpnstack->s[++stptr] = DNAN;
} else {
- /* when goodvals and badvals meet, they might have met on a
- * NAN, which wouldn't decrease final_elements. so, check
- * that now. */
- if (isnan(*goodvals)) --final_elements;
/* and finally, take the median of the remaining non-NAN
* elements. */
qsort(element_ptr, final_elements, sizeof(double),
|