From 3e5a508b15fe28083dfdf5a049d33e8769616395 Mon Sep 17 00:00:00 2001 From: Dirk Hohndel Date: Wed, 23 Jan 2013 11:55:29 -0800 Subject: 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 --- uemis-downloader.c | 2 +- uemis.c | 4 +++- 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); } -- cgit v1.2.3-70-g09d2