From 5a65bb75dab52253db0950254a332a4cd528f41c Mon Sep 17 00:00:00 2001 From: Berthold Stoeger Date: Tue, 16 Oct 2018 11:22:05 +0200 Subject: [PATCH] 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 --- core/parse-xml.c | 3 +++ 1 file changed, 3 insertions(+) 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)