summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Dirk Hohndel <dirk@hohndel.org>2013-01-23 11:55:29 -0800
committerGravatar Dirk Hohndel <dirk@hohndel.org>2013-01-23 11:57:00 -0800
commit3e5a508b15fe28083dfdf5a049d33e8769616395 (patch)
tree2988b0075a67d1748b28bbe3df5e88e03ac08ae9
parentb1db60ba4795638192c0dea93670d858d4178528 (diff)
downloadsubsurface-3e5a508b15fe28083dfdf5a049d33e8769616395.tar.gz
Ensure each dive has its own copy of the location text (UEMIS importer)
Since multiple dives can reference the same divesite we need to do the strdup when the value gets assigned, not when it gets passed into the helper function. This also validates the location string as on my divecomputer there is an invalid divespot 0 that has a corrupted UTF8 string as location name. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
-rw-r--r--uemis-downloader.c2
-rw-r--r--uemis.c4
2 files changed, 4 insertions, 2 deletions
diff --git a/uemis-downloader.c b/uemis-downloader.c
index 4a9f4272b..631bb23f1 100644
--- a/uemis-downloader.c
+++ b/uemis-downloader.c
@@ -575,7 +575,7 @@ static void parse_divespot(char *buf)
latitude = g_ascii_strtod(val, NULL);
}
} while (tag && *tag);
- uemis_set_divelocation(divespot, strdup(locationstring), latitude, longitude);
+ uemis_set_divelocation(divespot, locationstring, latitude, longitude);
}
static void track_divespot(char *val, int diveid, char **location, degrees_t *latitude, degrees_t *longitude)
diff --git a/uemis.c b/uemis.c
index d323cd802..29913ca0d 100644
--- a/uemis.c
+++ b/uemis.c
@@ -166,9 +166,11 @@ void uemis_mark_divelocation(int diveid, int divespot, char **location, degrees_
void uemis_set_divelocation(int divespot, char *text, double longitude, double latitude)
{
struct uemis_helper *hp = uemis_helper;
+ if (!g_utf8_validate(text, -1, NULL))
+ return;
while (hp) {
if (hp->divespot == divespot && hp->location) {
- *hp->location = text;
+ *hp->location = strdup(text);
hp->longitude->udeg = round(longitude * 1000000);
hp->latitude->udeg = round(latitude * 1000000);
}