SIGFPE in fixup_divep at dive.c:479 when importing dive with duration == 0

Lutz Vieweg lvml at 5t9.de
Sat Aug 18 08:20:57 PDT 2012


Hi,

subsurface just crashed on me when I tried to import many dives I had 
exported from SDM earlier.

Obvious cause is line dive.c:479, which divides by zero if the dive 
duration is zero:
> 		dive->meandepth.mm = dive->maxdepth.mm*(dive->duration.seconds-asc_desc_time)/dive->duration.seconds;

I applied the following fix:

diff --git a/dive.c b/dive.c
index f4bf497..fdcd71f 100644
--- a/dive.c
+++ b/dive.c
@@ -476,7 +476,11 @@ struct dive *fixup_dive(struct dive *dive)
         {
                 /* Assume an ascent/descent rate of 9 m/min */
                 int asc_desc_time = dive->maxdepth.mm*60/9000;
-               dive->meandepth.mm = 
dive->maxdepth.mm*(dive->duration.seconds-asc_desc_time)/dive->duration.seconds;
+               if (dive->duration.seconds > 0) {
+                       dive->meandepth.mm = 
dive->maxdepth.mm*(dive->duration.seconds-asc_desc_time)/dive->duration.seconds;
+               } else {
+                       dive->meandepth.mm = dive->maxdepth.mm;
+               }
                 return dive;
         }


Regards,

Lutz Vieweg


More information about the subsurface mailing list