[PATCH] Fix crash when no dives were selected for downloading

Miika Turkia miika.turkia at gmail.com
Mon Jan 26 20:50:42 PST 2015


Signed-off-by: Miika Turkia <miika.turkia at gmail.com>
---
 qt-ui/downloadfromdivecomputer.cpp | 26 ++++++++++++++++----------
 1 file changed, 16 insertions(+), 10 deletions(-)

diff --git a/qt-ui/downloadfromdivecomputer.cpp b/qt-ui/downloadfromdivecomputer.cpp
index 6fa83e1..cd3dd90 100644
--- a/qt-ui/downloadfromdivecomputer.cpp
+++ b/qt-ui/downloadfromdivecomputer.cpp
@@ -418,6 +418,8 @@ void DownloadFromDCWidget::on_cancel_clicked()
 
 void DownloadFromDCWidget::on_ok_clicked()
 {
+	struct dive *dive;
+
 	if (currentState != DONE)
 		return;
 
@@ -433,16 +435,20 @@ void DownloadFromDCWidget::on_ok_clicked()
 	// remember the last downloaded dive (on most dive computers this will be the chronologically
 	// first new dive) and select it again after processing all the dives
 	MainWindow::instance()->dive_list()->unselectDives();
-	uniqId = get_dive(dive_table.nr - 1)->id;
-	process_dives(true, preferDownloaded());
-	// after process_dives does any merging or resorting needed, we need
-	// to recreate the model for the dive list so we can select the newest dive
-	MainWindow::instance()->recreateDiveList();
-	idx = get_idx_by_uniq_id(uniqId);
-	// this shouldn't be necessary - but there are reports that somehow existing dives stay selected
-	// (but not visible as selected)
-	MainWindow::instance()->dive_list()->unselectDives();
-	MainWindow::instance()->dive_list()->selectDive(idx, true);
+
+	dive = get_dive(dive_table.nr - 1);
+	if (dive != NULL) {
+		uniqId = get_dive(dive_table.nr - 1)->id;
+		process_dives(true, preferDownloaded());
+		// after process_dives does any merging or resorting needed, we need
+		// to recreate the model for the dive list so we can select the newest dive
+		MainWindow::instance()->recreateDiveList();
+		idx = get_idx_by_uniq_id(uniqId);
+		// this shouldn't be necessary - but there are reports that somehow existing dives stay selected
+		// (but not visible as selected)
+		MainWindow::instance()->dive_list()->unselectDives();
+		MainWindow::instance()->dive_list()->selectDive(idx, true);
+	}
 
 	if (ostcFirmwareCheck && currentState == DONE)
 		ostcFirmwareCheck->checkLatest(this, &data);
-- 
1.9.1



More information about the subsurface mailing list