On 01/10/2011 05:38 PM, Eric Blake wrote:
* src/conf/network_conf.c (virNetworkDefParseXML): Release ipNodes. --- Another memleak found by valgrind; shown with additional context to make review easier. src/conf/network_conf.c | 4 +++- 1 files changed, 3 insertions(+), 1 deletions(-) diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c index abe91b5..28a3ee8 100644 --- a/src/conf/network_conf.c +++ b/src/conf/network_conf.c @@ -1,22 +1,22 @@ /* * network_conf.c: network XML handling * - * Copyright (C) 2006-2010 Red Hat, Inc. + * Copyright (C) 2006-2011 Red Hat, Inc. * Copyright (C) 2006-2008 Daniel P. Berrange * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Author: Daniel P. Berrange<berrange@xxxxxxxxxx> */ @@ -631,67 +631,69 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt) nIps = virXPathNodeSet("./ip", ctxt,&ipNodes); if (nIps> 0) { int ii; /* allocate array to hold all the addrs */ if (VIR_ALLOC_N(def->ips, nIps)< 0) { virReportOOMError(); goto error; } /* parse each addr */ for (ii = 0; ii< nIps; ii++) { int ret = virNetworkIPParseXML(def->name,&def->ips[ii], ipNodes[ii], ctxt); if (ret< 0) goto error; def->nips++; } } + VIR_FREE(ipNodes); /* IPv4 forwarding setup */ if (virXPathBoolean("count(./forward)> 0", ctxt)) { if (def->nips == 0) { virNetworkReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("Forwarding requested, but no IP address provided")); goto error; } tmp = virXPathString("string(./forward[1]/@mode)", ctxt); if (tmp) { if ((def->forwardType = virNetworkForwardTypeFromString(tmp))< 0) { virNetworkReportError(VIR_ERR_INTERNAL_ERROR, _("unknown forwarding type '%s'"), tmp); VIR_FREE(tmp); goto error; } VIR_FREE(tmp); } else { def->forwardType = VIR_NETWORK_FORWARD_NAT; } def->forwardDev = virXPathString("string(./forward[1]/@dev)", ctxt); } else { def->forwardType = VIR_NETWORK_FORWARD_NONE; } return def; error: virNetworkDefFree(def); + VIR_FREE(ipNodes); return NULL; } static virNetworkDefPtr virNetworkDefParse(const char *xmlStr, const char *filename) { xmlDocPtr xml; virNetworkDefPtr def = NULL; if ((xml = virXMLParse(filename, xmlStr, "network.xml"))) { def = virNetworkDefParseNode(xml, xmlDocGetRootElement(xml)); xmlFreeDoc(xml); } return def; }
ACK -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list