diff options
author | Berthold Stoeger <bstoeger@mail.tuwien.ac.at> | 2018-10-16 11:22:05 +0200 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2018-10-16 06:20:46 -0400 |
commit | 5a65bb75dab52253db0950254a332a4cd528f41c (patch) | |
tree | 43d631c60f6d484deb0f5ff0e71abd5188ec312e /core | |
parent | 6fd663f9b39cd60c7381ab16c798f68530194f2b (diff) | |
download | subsurface-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.c | 3 |
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) |