Code

- Adding debian/patches/bts428778-floating-point-exception to fix a corner
[pkg-rrdtool.git] / debian / patches / bts428778-floating-point-exception
diff --git a/debian/patches/bts428778-floating-point-exception b/debian/patches/bts428778-floating-point-exception
new file mode 100644 (file)
index 0000000..41d3756
--- /dev/null
@@ -0,0 +1,20 @@
+Index: rrdtool/src/rrd_create.c
+===================================================================
+--- rrdtool.orig/src/rrd_create.c      2008-02-24 16:12:49.000000000 +0100
++++ rrdtool/src/rrd_create.c   2008-02-24 16:13:34.000000000 +0100
+@@ -619,6 +619,15 @@
+            default:
+                /* can not be zero because we don't know anything ... */
+                rrd->cdp_prep->scratch[CDP_val].u_val = DNAN;
++               /* If the step is 0, we're going to have a BIG Floating Point Exception (i.e. SIGFPE). */
++               /* Example: (( 1202705167 - 67 ) % ( 300 * 0 )) / 300 */
++               if (rrd->rra_def[i].pdp_cnt == 0)
++               {
++                   rrd_set_error("Invalid step: must be greater than 0.");
++                   rrd_free(rrd);
++                   fclose(rrd_file);
++                   return(-1);
++               }
+                /* startup missing pdp count */
+                rrd->cdp_prep->scratch[CDP_unkn_pdp_cnt].u_cnt = 
+                    ((rrd->live_head->last_up -