]> git.tdb.fi Git - ext/subsurface.git/commitdiff
Make fixup_divep robust against insane dive times
authorLinus Torvalds <torvalds@linux-foundation.org>
Sat, 18 Aug 2012 16:02:27 +0000 (09:02 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sat, 18 Aug 2012 16:02:27 +0000 (09:02 -0700)
This fixes the case of the dive duration being zero, or being shorter
than the assumed ascent/descent time.

Reported-by: Lutz Vieweg <lvml@5t9.de>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
dive.c

diff --git a/dive.c b/dive.c
index f4bf497a7da0edeafb91b5a26b1de067f87d64b7..aee09d53a8b37796fc6f2fa0e448f92102be745e 100644 (file)
--- a/dive.c
+++ b/dive.c
@@ -472,11 +472,18 @@ struct dive *fixup_dive(struct dive *dive)
                        cyl->sample_end.mbar = 0;
                }
        }
-       if (end < 0)
-       {
+       if (end < 0) {
                /* 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;
+               int depth = dive->maxdepth.mm;
+               int asc_desc_time = depth*60/9000;
+               int duration = dive->duration.seconds;
+
+               /* Protect against insane dives - make mean be half of max */
+               if (duration <= asc_desc_time) {
+                       duration = 2;
+                       asc_desc_time = 1;
+               }
+               dive->meandepth.mm = depth*(duration-asc_desc_time)/duration;
                return dive;
        }