Fix memory leaks in XML documentation

This patch fixes two memory leaks:
1) When building XML documentation items, the 'name' attribute was extracted
   from XML elements but not properly freed after being copied into the item
   being built.
2) When unloading XML documentation, the doctree container objects were not
   properly freed.

This patch corrects these memory leaks.  Note that this patch was modified
slightly for this commmit, as the case where the 'name' attribute doesn't
exist also wasn't handled in the item construction.  This patch also checks
for that attribute not existing.

(closes issue ASTERISK-20648)
Reported by: Corey Farrell
Tested by: mjordan
patches:
  xmldoc-memory_leak.patch uploaded by Corey Farrell (license 5909)
........

Merged revisions 375756 from http://svn.asterisk.org/svn/asterisk/branches/11


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@375757 65c4cc65-6c06-0410-ace0-fbb531ad65f3
changes/78/78/1
Matthew Jordan 13 years ago
parent 19282f682e
commit ff469e9d5d

@ -2251,6 +2251,9 @@ struct ao2_container *ast_xmldoc_build_documentation(const char *type)
continue;
}
name = ast_xml_get_attribute(node, "name");
if (!name) {
continue;
}
switch (xmldoc_get_syntax_type(type)) {
case MANAGER_EVENT_SYNTAX:
@ -2276,6 +2279,7 @@ struct ao2_container *ast_xmldoc_build_documentation(const char *type)
default:
item = xmldoc_build_documentation_item(node, name, type);
}
ast_xml_free_attr(name);
if (item) {
ao2_link(docs, item);
@ -2341,6 +2345,7 @@ static void xmldoc_unload_documentation(void)
while ((doctree = AST_RWLIST_REMOVE_HEAD(&xmldoc_tree, entry))) {
ast_free(doctree->filename);
ast_xml_close(doctree->doc);
ast_free(doctree);
}
AST_RWLIST_UNLOCK(&xmldoc_tree);

Loading…
Cancel
Save