mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-02 02:18:31 +00:00
Memory leak fix
ast_xmldoc_printable returns an allocated block that must be freed by the caller. Fixed manager.c and res_agi.c to stop leaking these results. (closes issue ASTERISK-22395) Reported by: Corey Farrell Patches: manager-leaks-12.patch uploaded by coreyfarrell (license 5909) res_agi-xmldoc-leaks.patch uploaded by coreyfarrell (license 5909) ........ Merged revisions 398060 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 398061 from http://svn.asterisk.org/svn/asterisk/branches/11 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/12@398062 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -1924,19 +1924,19 @@ static char *handle_showmancmd(struct ast_cli_entry *e, int cmd, struct ast_cli_
|
||||
|
||||
#ifdef AST_XML_DOCS
|
||||
if (cur->docsrc == AST_XML_DOC) {
|
||||
char *syntax = ast_xmldoc_printable(S_OR(cur->syntax, "Not available"), 1);
|
||||
char *synopsis = ast_xmldoc_printable(S_OR(cur->synopsis, "Not available"), 1);
|
||||
char *description = ast_xmldoc_printable(S_OR(cur->description, "Not available"), 1);
|
||||
char *arguments = ast_xmldoc_printable(S_OR(cur->arguments, "Not available"), 1);
|
||||
char *seealso = ast_xmldoc_printable(S_OR(cur->seealso, "Not available"), 1);
|
||||
char *privilege = ast_xmldoc_printable(S_OR(authority->str, "Not available"), 1);
|
||||
ast_cli(a->fd, "%s%s\n\n%s%s\n\n%s%s\n\n%s%s\n\n%s%s\n\n%s%s\n\n",
|
||||
syntax_title,
|
||||
ast_xmldoc_printable(S_OR(cur->syntax, "Not available"), 1),
|
||||
synopsis_title,
|
||||
ast_xmldoc_printable(S_OR(cur->synopsis, "Not available"), 1),
|
||||
description_title,
|
||||
ast_xmldoc_printable(S_OR(cur->description, "Not available"), 1),
|
||||
arguments_title,
|
||||
ast_xmldoc_printable(S_OR(cur->arguments, "Not available"), 1),
|
||||
seealso_title,
|
||||
ast_xmldoc_printable(S_OR(cur->seealso, "Not available"), 1),
|
||||
privilege_title,
|
||||
ast_xmldoc_printable(S_OR(authority->str, "Not available"), 1));
|
||||
syntax_title, syntax,
|
||||
synopsis_title, synopsis,
|
||||
description_title, description,
|
||||
arguments_title, arguments,
|
||||
seealso_title, seealso,
|
||||
privilege_title, privilege);
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
@@ -7560,29 +7560,29 @@ static char *handle_manager_show_event(struct ast_cli_entry *e, int cmd, struct
|
||||
ast_cli(a->fd, "Event: %s\n", a->argv[3]);
|
||||
for (temp = item; temp; temp = temp->next) {
|
||||
if (!ast_strlen_zero(ast_str_buffer(temp->synopsis))) {
|
||||
ast_cli(a->fd, "%s%s\n\n",
|
||||
synopsis_title,
|
||||
ast_xmldoc_printable(ast_str_buffer(temp->synopsis), 1));
|
||||
char *synopsis = ast_xmldoc_printable(ast_str_buffer(temp->synopsis), 1);
|
||||
ast_cli(a->fd, "%s%s\n\n", synopsis_title, synopsis);
|
||||
ast_free(synopsis);
|
||||
}
|
||||
if (!ast_strlen_zero(ast_str_buffer(temp->syntax))) {
|
||||
ast_cli(a->fd, "%s%s\n\n",
|
||||
syntax_title,
|
||||
ast_xmldoc_printable(ast_str_buffer(temp->syntax), 1));
|
||||
char *syntax = ast_xmldoc_printable(ast_str_buffer(temp->syntax), 1);
|
||||
ast_cli(a->fd, "%s%s\n\n", syntax_title, syntax);
|
||||
ast_free(syntax);
|
||||
}
|
||||
if (!ast_strlen_zero(ast_str_buffer(temp->description))) {
|
||||
ast_cli(a->fd, "%s%s\n\n",
|
||||
description_title,
|
||||
ast_xmldoc_printable(ast_str_buffer(temp->description), 1));
|
||||
char *description = ast_xmldoc_printable(ast_str_buffer(temp->description), 1);
|
||||
ast_cli(a->fd, "%s%s\n\n", description_title, description);
|
||||
ast_free(description);
|
||||
}
|
||||
if (!ast_strlen_zero(ast_str_buffer(temp->arguments))) {
|
||||
ast_cli(a->fd, "%s%s\n\n",
|
||||
arguments_title,
|
||||
ast_xmldoc_printable(ast_str_buffer(temp->arguments), 1));
|
||||
char *arguments = ast_xmldoc_printable(ast_str_buffer(temp->arguments), 1);
|
||||
ast_cli(a->fd, "%s%s\n\n", arguments_title, arguments);
|
||||
ast_free(arguments);
|
||||
}
|
||||
if (!ast_strlen_zero(ast_str_buffer(temp->seealso))) {
|
||||
ast_cli(a->fd, "%s%s\n\n",
|
||||
seealso_title,
|
||||
ast_xmldoc_printable(ast_str_buffer(temp->seealso), 1));
|
||||
char *seealso = ast_xmldoc_printable(ast_str_buffer(temp->seealso), 1);
|
||||
ast_cli(a->fd, "%s%s\n\n", seealso_title, seealso);
|
||||
ast_free(seealso);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -4042,9 +4042,6 @@ static int write_htmldump(const char *filename)
|
||||
|
||||
AST_RWLIST_RDLOCK(&agi_commands);
|
||||
AST_RWLIST_TRAVERSE(&agi_commands, command, list) {
|
||||
#ifdef AST_XML_DOCS
|
||||
char *stringptmp;
|
||||
#endif
|
||||
char *tempstr, *stringp;
|
||||
|
||||
if (!command->cmda[0]) /* end ? */
|
||||
@@ -4057,8 +4054,7 @@ static int write_htmldump(const char *filename)
|
||||
fprintf(htmlfile, "<TR><TD><TABLE BORDER=\"1\" CELLPADDING=\"5\" WIDTH=\"100%%\">\n");
|
||||
fprintf(htmlfile, "<TR><TH ALIGN=\"CENTER\"><B>%s - %s</B></TH></TR>\n", fullcmd, command->summary);
|
||||
#ifdef AST_XML_DOCS
|
||||
stringptmp = ast_xmldoc_printable(command->usage, 0);
|
||||
stringp = ast_strdup(stringptmp);
|
||||
stringp = ast_xmldoc_printable(command->usage, 0);
|
||||
#else
|
||||
stringp = ast_strdup(command->usage);
|
||||
#endif
|
||||
@@ -4076,9 +4072,6 @@ static int write_htmldump(const char *filename)
|
||||
fprintf(htmlfile, "</TD></TR>\n");
|
||||
fprintf(htmlfile, "</TABLE></TD></TR>\n\n");
|
||||
ast_free(stringp);
|
||||
#ifdef AST_XML_DOCS
|
||||
ast_free(stringptmp);
|
||||
#endif
|
||||
}
|
||||
AST_RWLIST_UNLOCK(&agi_commands);
|
||||
fprintf(htmlfile, "</TABLE>\n</BODY>\n</HTML>\n");
|
||||
|
Reference in New Issue
Block a user