summaryrefslogtreecommitdiffstats
path: root/parse-xml.c
diff options
context:
space:
mode:
authorGravatar Lubomir I. Ivanov <neolit123@gmail.com>2012-12-24 03:51:39 +0200
committerGravatar Dirk Hohndel <dirk@hohndel.org>2012-12-27 08:05:18 -0800
commitcc3b87c04492051146c01e4339f09065ef754db2 (patch)
tree7a703efba1085a7dcd1191d7a4f25c7838318b92 /parse-xml.c
parent720d4c65e854dceaedafd4d435a1832b75633d84 (diff)
downloadsubsurface-cc3b87c04492051146c01e4339f09065ef754db2.tar.gz
Clear memory allocated for event names
parse-xml.c: When parsing events, we allocate memory for the event 'name' attribute, but also have to free this memory eventually. Let's do that in event_end() right after add_event() is called. Fixes a long-running memory leak in the parser. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'parse-xml.c')
-rw-r--r--parse-xml.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/parse-xml.c b/parse-xml.c
index f82338b8a..2e4dbc560 100644
--- a/parse-xml.c
+++ b/parse-xml.c
@@ -1096,10 +1096,13 @@ static struct divecomputer *get_dc(void)
static void event_end(void)
{
struct divecomputer *dc = get_dc();
- if (cur_event.name && strcmp(cur_event.name, "surface") != 0)
- add_event(dc, cur_event.time.seconds,
- cur_event.type, cur_event.flags,
- cur_event.value, cur_event.name);
+ if (cur_event.name) {
+ if (strcmp(cur_event.name, "surface") != 0)
+ add_event(dc, cur_event.time.seconds,
+ cur_event.type, cur_event.flags,
+ cur_event.value, cur_event.name);
+ free((void *)cur_event.name);
+ }
cur_event.active = 0;
}