[PATCH] OSTCTools - Improve error management (II)

Salvador Cuñat salvador.cunat at gmail.com
Mon Jul 13 12:27:33 PDT 2015


Have just found a .dive file in H&W forum which is not correctly parsed
by libdivecomputer due (I think) to a bug in OSTC3 FW 1.77 (corrected).

If libdc fails to parse a file (whatever is the reason) and the header
hasn't been parsed, strcmp(ptr->key, "Serial") will segfault, so avoid
comparison if there is no ostcdive->dc.extra_data but set the serial
data as we know it from ostctools.

Signed-off-by: Salvador Cuñat <salvador.cunat at gmail.com>
---
 ostctools.c | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/ostctools.c b/ostctools.c
index 0ae2919..a1727ce 100644
--- a/ostctools.c
+++ b/ostctools.c
@@ -174,13 +174,16 @@ void ostctools_import(const char *file, struct dive_table *divetable)
 	ostcdive->dc.serial = copy_string(tmp);
 	free(tmp);
 
-	ptr = ostcdive->dc.extra_data;
-	while (strcmp(ptr->key, "Serial"))
-		ptr = ptr->next;
-	if (!strcmp(ptr->value, "0")) {
+	if (ostcdive->dc.extra_data) {
+		ptr = ostcdive->dc.extra_data;
+		while (strcmp(ptr->key, "Serial"))
+			ptr = ptr->next;
+		if (!strcmp(ptr->value, "0")) {
+			add_extra_data(&ostcdive->dc, "Serial", ostcdive->dc.serial);
+			*ptr = *(ptr)->next;
+		}
+	} else
 		add_extra_data(&ostcdive->dc, "Serial", ostcdive->dc.serial);
-		*ptr = *(ptr)->next;
-	}
 
 	record_dive_to_table(ostcdive, divetable);
 	mark_divelist_changed(true);
-- 
2.1.4



More information about the subsurface mailing list