]> git.tdb.fi Git - ext/subsurface.git/commitdiff
Fix use of uninitialized variable if there are no samples
authorLinus Torvalds <torvalds@linux-foundation.org>
Sat, 29 Oct 2011 20:24:56 +0000 (13:24 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sat, 29 Oct 2011 20:24:56 +0000 (13:24 -0700)
When creating the plot_info, the 'entry' variable pointing to the last
plot_info data was not initialized (because there was no data to fill
in), and was then incorrectly used to fill in the last tank pressure.

We also used to look at 'dive->sample[0].cylinderindex' even if no
sample[0] necessarily existed.

Reported-by: Miika Turkia <miika.turkia@gmail.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
profile.c

index 56716f5f767c11646d0edaade51d2b9b4d1b427f..41650b794bef7cf56838d43d8e6a22db0e08113b 100644 (file)
--- a/profile.c
+++ b/profile.c
@@ -1010,7 +1010,7 @@ static struct plot_info *create_plot_info(struct dive *dive)
        pr_track_t *track_pr[MAX_CYLINDERS] = {NULL, };
        pr_track_t *pr_track, *current;
        gboolean missing_pr = FALSE;
-       struct plot_data *entry;
+       struct plot_data *entry = NULL;
 
        pi = malloc(alloc_size);
        if (!pi)
@@ -1043,7 +1043,7 @@ static struct plot_info *create_plot_info(struct dive *dive)
 
        for (cyl = 0; cyl < MAX_CYLINDERS; cyl++) /* initialize the start pressures */
                track_pr[cyl] = pr_track_alloc(dive->cylinder[cyl].start.mbar, -1);
-       current = track_pr[dive->sample[0].cylinderindex];
+       current = track_pr[pi->entry[2].cylinderindex];
        for (i = 0; i < dive->samples; i++) {
                entry = pi->entry + i + 2;
 
@@ -1073,7 +1073,9 @@ static struct plot_info *create_plot_info(struct dive *dive)
                missing_pr |= !SENSOR_PRESSURE(entry);
        }
 
-       current->t_end = entry->sec;
+       if (entry)
+               current->t_end = entry->sec;
+
        for (cyl = 0; cyl < MAX_CYLINDERS; cyl++) { /* initialize the end pressures */
                int pr = dive->cylinder[cyl].end.mbar;
                if (pr && track_pr[cyl]) {