summaryrefslogtreecommitdiff
path: root/databases/rrdtool/files/patch-src_rrd__rpncalc.c
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),