summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Salvador Cuñat <salvador.cunat@gmail.com>2015-07-13 21:27:33 +0200
committerGravatar Dirk Hohndel <dirk@hohndel.org>2015-07-13 15:21:30 -0700
commit521183dc736b26afd8719bc83dfb41bfe62c1c70 (patch)
tree9d4d27639b7944899d3adedd608849a5c2dfd0d8
parent2ace3195f444f2b40a32ffb550511b02bea57162 (diff)
downloadsubsurface-521183dc736b26afd8719bc83dfb41bfe62c1c70.tar.gz
OSTCTools - Improve error management (II)
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@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
-rw-r--r--ostctools.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/ostctools.c b/ostctools.c
index 0ae29191a..a1727ce16 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);