]> git.tdb.fi Git - ext/subsurface.git/commitdiff
Avoid SIGSEGV when editing multiple dives
authorLinus Torvalds <torvalds@linux-foundation.org>
Thu, 16 Aug 2012 18:03:39 +0000 (11:03 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 16 Aug 2012 18:03:39 +0000 (11:03 -0700)
The multi-dive editing is broken if you right-click on the dive
text-fields (instead of the divelist).  This just avoids the SIGSEGV, it
doesn't really fix the editing.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
info.c

diff --git a/info.c b/info.c
index 1c7b6a9ac7d57bf7f8fd73e134e91eb27eeee1b1..6842d3d5b36b3427466629b572dbf9286fa13181 100644 (file)
--- a/info.c
+++ b/info.c
@@ -470,13 +470,18 @@ int edit_multi_dive_info(int nr, int *indices)
        success = gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT;
        if (success)
                for (i = 0; i < nr; i++) {
        success = gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT;
        if (success)
                for (i = 0; i < nr; i++) {
+                       int idx = indices[i];
+                       struct dive *n = get_dive(idx);
+
+                       if (!n)
+                               continue;
                        /* copy all "info" fields */
                        /* copy all "info" fields */
-                       save_dive_info_changes(get_dive(indices[i]), &info);
+                       save_dive_info_changes(n, &info);
                        /* copy the cylinders / weightsystems */
                        /* copy the cylinders / weightsystems */
-                       update_equipment_data(get_dive(indices[i]), dive);
+                       update_equipment_data(n, dive);
                        /* this is extremely inefficient... it loops through all
                           dives to find the right one - but we KNOW the index already */
                        /* this is extremely inefficient... it loops through all
                           dives to find the right one - but we KNOW the index already */
-                       flush_divelist(get_dive(indices[i]));
+                       flush_divelist(n);
                }
        gtk_widget_destroy(dialog);
 
                }
        gtk_widget_destroy(dialog);