[asterisk-commits] kharwell: branch 11 r398061 - in /branches/11: ./ main/manager.c res/res_agi.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Fri Aug 30 12:53:58 CDT 2013


Author: kharwell
Date: Fri Aug 30 12:53:56 2013
New Revision: 398061

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=398061
Log:
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-11.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

Modified:
    branches/11/   (props changed)
    branches/11/main/manager.c
    branches/11/res/res_agi.c

Propchange: branches/11/
------------------------------------------------------------------------------
Binary property 'branch-1.8-merged' - no diff available.

Modified: branches/11/main/manager.c
URL: http://svnview.digium.com/svn/asterisk/branches/11/main/manager.c?view=diff&rev=398061&r1=398060&r2=398061
==============================================================================
--- branches/11/main/manager.c (original)
+++ branches/11/main/manager.c Fri Aug 30 12:53:56 2013
@@ -1652,17 +1652,22 @@
 			if (!strcasecmp(cur->action, a->argv[num])) {
 #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);
 					ast_cli(a->fd, "%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));
+						syntax_title, syntax,
+						synopsis_title, synopsis,
+						description_title, description,
+						arguments_title, arguments,
+						seealso_title, seealso);
+					ast_free(syntax);
+					ast_free(synopsis);
+					ast_free(description);
+					ast_free(arguments);
+					ast_free(seealso);
 				} else
 #endif
 				{
@@ -7261,29 +7266,29 @@
 	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);
 		}
 	}
 

Modified: branches/11/res/res_agi.c
URL: http://svnview.digium.com/svn/asterisk/branches/11/res/res_agi.c?view=diff&rev=398061&r1=398060&r2=398061
==============================================================================
--- branches/11/res/res_agi.c (original)
+++ branches/11/res/res_agi.c Fri Aug 30 12:53:56 2013
@@ -3841,9 +3841,6 @@
 
 	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 ? */
@@ -3856,8 +3853,7 @@
 		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
@@ -3875,9 +3871,6 @@
 		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");




More information about the asterisk-commits mailing list