From: Matthew Jordan Date: Fri, 17 Aug 2012 20:21:30 +0000 (+0000) Subject: Fix memory leak in XML documentation X-Git-Tag: 10.9.0-rc1~55 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b11ffd0514bf86088a2eca562ddfb029ab2a27b7;p=thirdparty%2Fasterisk.git Fix memory leak in XML documentation When formatting documentation fields, the XML documentation parser calls xmldoc_get_formatted. This function allocates a string buffer at the beginning of its routine. Unfortunately, on certain code paths, it also calls xmldoc_string_cleanup, which assumes that it will create the string buffer. The previously allocated string buffer is then leaked by the xmldoc_string_cleanup routine. Now: we don't do that. (closes issue AST-932) Reported by: Alexander Homig ........ Merged revisions 371469 from http://svn.asterisk.org/svn/asterisk/branches/1.8 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/10@371491 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/main/xmldoc.c b/main/xmldoc.c index f83f58a653..6e2d90c59d 100644 --- a/main/xmldoc.c +++ b/main/xmldoc.c @@ -1798,14 +1798,16 @@ static struct ast_str *xmldoc_get_formatted(struct ast_xml_node *node, int raw_o { struct ast_xml_node *tmp; const char *notcleanret, *tmpstr; - struct ast_str *ret = ast_str_create(128); + struct ast_str *ret; if (raw_output) { + /* xmldoc_string_cleanup will allocate the ret object */ notcleanret = ast_xml_get_text(node); tmpstr = notcleanret; xmldoc_string_cleanup(ast_skip_blanks(notcleanret), &ret, 0); ast_xml_free_text(tmpstr); } else { + ret = ast_str_create(128); for (tmp = ast_xml_node_get_children(node); tmp; tmp = ast_xml_node_get_next(tmp)) { /* if found, parse a element. */ if (xmldoc_parse_para(tmp, "", "\n", &ret)) {