From 7e3faa0959f698762a2d91dab092e4f6b0575e3c Mon Sep 17 00:00:00 2001 From: Zhang Bo Date: Mon, 27 Apr 2015 14:41:44 +0800 Subject: [PATCH] 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 --- src/conf/domain_conf.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index fb7594fa7..1b520b916 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 -- 2.39.5