[svn-commits] eliel: branch group/appdocsxml r150198 - /team/group/appdocsxml/main/pbx.c

SVN commits to the Digium repositories svn-commits at lists.digium.com
Thu Oct 16 11:50:47 CDT 2008


Author: eliel
Date: Thu Oct 16 11:50:46 2008
New Revision: 150198

URL: http://svn.digium.com/view/asterisk?view=rev&rev=150198
Log:
Fix a memory leak added in my last commit when using ast_asprintf.
Attribute 'name' in a <parameter> tag is required, so it is not needed to continue parsing the <parameter> if
no 'name' was given.
Cleanup the code (style).

Modified:
    team/group/appdocsxml/main/pbx.c

Modified: team/group/appdocsxml/main/pbx.c
URL: http://svn.digium.com/view/asterisk/team/group/appdocsxml/main/pbx.c?view=diff&rev=150198&r1=150197&r2=150198
==============================================================================
--- team/group/appdocsxml/main/pbx.c (original)
+++ team/group/appdocsxml/main/pbx.c Thu Oct 16 11:50:46 2008
@@ -4266,14 +4266,15 @@
 		} else if (xmldoc_parse_specialtags(node, (ret ? tabs :  ""), "\n", buffer)) {
 			ret = 1;
 		}
-		
+
 		xmldoc_parse_variablelist(node, optiontabs, buffer);
-		
+
 		xmldoc_parse_enumlist(node, optiontabs, buffer);
 
-		node = node->AST_XML_NEXT;	
-	}
-			
+		node = node->AST_XML_NEXT;
+	}
+	ast_free(optiontabs);
+
 	return ret;
 }
 
@@ -4339,24 +4340,23 @@
 	int hasarguments, printed = 0;
 	char *internaltabs;
 	
-	ast_asprintf(&internaltabs, "%s    ", tabs);
-
 	if (!node || !node->AST_XML_CHILD || strcasecmp((char *)node->AST_XML_NAME, "parameter")) {
 		return;
 	}
 
 	hasarguments = xmldoc_has_arguments(node);
-	paramname = ast_xml_get_attribute(node, "name");
+	if (!(paramname = ast_xml_get_attribute(node, "name"))) {
+		/* parameter MUST have an attribute name. */
+		return;
+	}
 
 	if (!hasarguments) {
-		if (paramname) {
-			ast_str_append(buffer, 0, "%s\n", paramname);
-			ast_xml_free_attr(paramname);
-			printed = 1;
-		} else {
-			return;
-		}
-	}
+		ast_str_append(buffer, 0, "%s\n", paramname);
+		ast_xml_free_attr(paramname);
+		printed = 1;
+	}
+
+	ast_asprintf(&internaltabs, "%s    ", tabs);
 
 	node = node->AST_XML_CHILD;
 	while (node) {
@@ -4368,13 +4368,9 @@
 			xmldoc_parse_argument(node, 1, internaltabs, (!hasarguments ? "        " : ""), buffer);
 		} else if (!strcasecmp((char *)node->AST_XML_NAME, "para")) {
 			if (!printed) {
-				if (paramname) {
-					ast_str_append(buffer, 0, "%s\n", paramname);
-					ast_xml_free_attr(paramname);
-					printed = 1;
-				} else {
-					return;
-				}		
+				ast_str_append(buffer, 0, "%s\n", paramname);
+				ast_xml_free_attr(paramname);
+				printed = 1;
 			}	
 			xmldoc_parse_para(node, internaltabs, "\n", buffer);
 			node = node->AST_XML_NEXT;
@@ -4383,11 +4379,9 @@
 			node = node->AST_XML_NEXT;
 			continue;
 		}
-
 		node = node->AST_XML_NEXT;
 	}
-
-
+	ast_free(internaltabs);
 }
 
 /*! \internal




More information about the svn-commits mailing list