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.cu...@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

_______________________________________________
subsurface mailing list
subsurface@subsurface-divelog.org
http://lists.subsurface-divelog.org/cgi-bin/mailman/listinfo/subsurface

Reply via email to