From: Zhang Bo Date: Mon, 27 Apr 2015 06:41:44 +0000 (+0800) Subject: conf: fix memleak in virDomainNetIpParseXML X-Git-Tag: v1.2.15-rc1~20 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7e3faa0959f698762a2d91dab092e4f6b0575e3c;p=thirdparty%2Flibvirt.git conf: fix memleak in virDomainNetIpParseXML use cleanup instead of error, so that the allocated strings could also get freed when there's no error. Signed-off-by: Zhang Bo --- diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index fb7594fa77..1b520b9163 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -5124,7 +5124,7 @@ static virDomainNetIpDefPtr virDomainNetIpParseXML(xmlNodePtr node) { /* Parse the prefix in every case */ - virDomainNetIpDefPtr ip = NULL; + virDomainNetIpDefPtr ip = NULL, ret = NULL; char *prefixStr = NULL; unsigned int prefixValue = 0; char *familyStr = NULL; @@ -5140,7 +5140,7 @@ virDomainNetIpParseXML(xmlNodePtr node) if (!(address = virXMLPropString(node, "address"))) { virReportError(VIR_ERR_INVALID_ARG, "%s", _("Missing network address")); - goto error; + goto cleanup; } familyStr = virXMLPropString(node, "family"); @@ -5152,24 +5152,25 @@ virDomainNetIpParseXML(xmlNodePtr node) family = virSocketAddrNumericFamily(address); if (VIR_ALLOC(ip) < 0) - goto error; + goto cleanup; if (virSocketAddrParse(&ip->address, address, family) < 0) { virReportError(VIR_ERR_INVALID_ARG, _("Failed to parse IP address: '%s'"), address); - goto error; + goto cleanup; } ip->prefix = prefixValue; - return ip; + ret = ip; + ip = NULL; - error: + cleanup: VIR_FREE(prefixStr); VIR_FREE(familyStr); VIR_FREE(address); VIR_FREE(ip); - return NULL; + return ret; } static int