[PATCH] Fix crash if one selects incorrectly Seabear CSV

Miika Turkia miika.turkia at gmail.com
Sun Feb 1 03:45:07 PST 2015


Signed-off-by: Miika Turkia <miika.turkia at gmail.com>
---
 file.c                        | 7 +++++++
 qt-ui/divelogimportdialog.cpp | 5 +++--
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/file.c b/file.c
index eacd875..e03edaf 100644
--- a/file.c
+++ b/file.c
@@ -932,6 +932,13 @@ int parse_seabear_csv_file(const char *filename, int timef, int depthf, int temp
 		NL = "\r\n";
 	}
 
+	/*
+	 * If file does not contain empty lines, it is not a valid
+	 * Seabear CSV file.
+	 */
+	if (!ptr)
+		return -1;
+
 	if (!ptr_old) {
 		while ((ptr = strstr(ptr, "\n\n")) != NULL) {
 			ptr_old = ptr;
diff --git a/qt-ui/divelogimportdialog.cpp b/qt-ui/divelogimportdialog.cpp
index c79b9df..ca3a2be 100644
--- a/qt-ui/divelogimportdialog.cpp
+++ b/qt-ui/divelogimportdialog.cpp
@@ -526,7 +526,7 @@ void DiveLogImportDialog::on_buttonBox_accepted()
 	if (ui->knownImports->currentText() != "Manual import") {
 		for (int i = 0; i < fileNames.size(); ++i) {
 			if (ui->knownImports->currentText() == "Seabear CSV") {
-				parse_seabear_csv_file(fileNames[i].toUtf8().data(),
+				if (parse_seabear_csv_file(fileNames[i].toUtf8().data(),
 						       r.indexOf(tr("Sample time")),
 						       r.indexOf(tr("Sample depth")),
 						       r.indexOf(tr("Sample temperature")),
@@ -539,7 +539,8 @@ void DiveLogImportDialog::on_buttonBox_accepted()
 						       ui->CSVSeparator->currentIndex(),
 						       specialCSV.contains(ui->knownImports->currentIndex()) ? CSVApps[ui->knownImports->currentIndex()].name.toUtf8().data() : "csv",
 						       ui->CSVUnits->currentIndex()
-						       );
+						       ) < 0)
+					return;
 
 				// Seabear CSV stores NDL and TTS in Minutes, not seconds
 				struct dive *dive = dive_table.dives[dive_table.nr - 1];
-- 
1.9.1



More information about the subsurface mailing list