diff options
author | Salvador Cuñat <salvador.cunat@gmail.com> | 2015-07-13 21:27:33 +0200 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2015-07-13 15:21:30 -0700 |
commit | 521183dc736b26afd8719bc83dfb41bfe62c1c70 (patch) | |
tree | 9d4d27639b7944899d3adedd608849a5c2dfd0d8 | |
parent | 2ace3195f444f2b40a32ffb550511b02bea57162 (diff) | |
download | subsurface-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.c | 15 |
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); |