summaryrefslogtreecommitdiffstats
path: root/src/xplist.c
diff options
context:
space:
mode:
authorGravatar Nikias Bassen2016-06-29 13:17:00 +0200
committerGravatar Nikias Bassen2016-06-29 13:17:00 +0200
commit16f45a04f8790f36e5af939bfd728ee410470e05 (patch)
treef92be6bb3f0663f21941bbc20407736879225fed /src/xplist.c
parent02bd8acd41d1ed7891100fa0057981e98a0dbdad (diff)
downloadlibplist-16f45a04f8790f36e5af939bfd728ee410470e05.tar.gz
libplist-16f45a04f8790f36e5af939bfd728ee410470e05.tar.bz2
xplist: Plug memory leak when converting PLIST_UID nodes to XML
In node_to_xml nodes of type PLIST_UID are temporarily converted to a PLIST_DICT for an appropriate XML output. Therefore a PLIST_KEY and a PLIST_UINT node is created and inserted into the PLIST_DICT node. Upon completion, the child nodes of the PLIST_DICT node are detached from the original node and freed, however the data of the child nodes - the key string and the uint value - are not. This commit fixes it.
Diffstat (limited to 'src/xplist.c')
-rw-r--r--src/xplist.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/src/xplist.c b/src/xplist.c
index e0a76da..8fe3604 100644
--- a/src/xplist.c
+++ b/src/xplist.c
@@ -337,6 +337,7 @@ static void node_to_xml(node_t* node, void *xml_struct)
337 for (j = num; j > 0; j--) { 337 for (j = num; j > 0; j--) {
338 node_t* ch = node_nth_child(node, j-1); 338 node_t* ch = node_nth_child(node, j-1);
339 node_detach(node, ch); 339 node_detach(node, ch);
340 plist_free_data((plist_data_t)((node_t*)ch)->data);
340 node_destroy(ch); 341 node_destroy(ch);
341 } 342 }
342 node_data->type = PLIST_UID; 343 node_data->type = PLIST_UID;