From 51345e4ad828918a4e20b6aba40c3b0a137b1e73 Mon Sep 17 00:00:00 2001 From: Dirk Hohndel Date: Wed, 20 Nov 2013 07:44:45 -0800 Subject: Fix potential crash in the per tank sac calculation In an inconsistant XML file (like our own dives/test20.xml) it is possible that a gas change event refers to a non-existing gas. In that case get_gasidx returns -1 - which we shouldn't use as index into the arrays. Signed-off-by: Dirk Hohndel --- dive.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/dive.c b/dive.c index 52a2022ae..269aeb658 100644 --- a/dive.c +++ b/dive.c @@ -363,10 +363,11 @@ void per_cylinder_mean_depth(struct dive *dive, struct divecomputer *dc, int *me if (ev && time >= ev->time.seconds) { int o2 = (ev->value & 0xFFFF) * 10; int he = (ev->value >> 16) * 10; - idx = get_gasidx(dive, o2, he); + int tank = get_gasidx(dive, o2, he); + if (tank >= 0) + idx = tank; // should never happen unless the input file is inconsistent ev = get_next_event(ev->next, "gaschange"); } - /* We ignore segments at the surface */ if (depth > SURFACE_THRESHOLD || lastdepth > SURFACE_THRESHOLD) { duration[idx] += time - lasttime; -- cgit v1.2.3-70-g09d2