summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorGravatar Berthold Stoeger <bstoeger@mail.tuwien.ac.at>2018-10-16 11:22:05 +0200
committerGravatar Dirk Hohndel <dirk@hohndel.org>2018-10-16 06:20:46 -0400
commit5a65bb75dab52253db0950254a332a4cd528f41c (patch)
tree43d631c60f6d484deb0f5ff0e71abd5188ec312e /core
parent6fd663f9b39cd60c7381ab16c798f68530194f2b (diff)
downloadsubsurface-5a65bb75dab52253db0950254a332a4cd528f41c.tar.gz
Parser: don't leak extra data key/value pairs
On parsing of dive computer extra data, key/value pairs are stored in global state. They are added to the dive computer with add_extra_data(), which makes a copy of the string. The local copies of the strings are never freed. free() the strings after storing them. The data still leaks in case of unfinished parsing of extra_data tags, but this will be taken care of in a subsequent commit. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
Diffstat (limited to 'core')
-rw-r--r--core/parse-xml.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/core/parse-xml.c b/core/parse-xml.c
index 5c6d8f94f..6af570739 100644
--- a/core/parse-xml.c
+++ b/core/parse-xml.c
@@ -270,6 +270,9 @@ static void extra_data_end(void)
// don't save partial structures - we must have both key and value
if (cur_extra_data.key && cur_extra_data.value)
add_extra_data(get_dc(), cur_extra_data.key, cur_extra_data.value);
+ free((void *)cur_extra_data.key);
+ free((void *)cur_extra_data.value);
+ cur_extra_data.key = cur_extra_data.value = NULL;
}
static void weight(char *buffer, weight_t *weight)