[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