[libvirt] [PATCH 1/4] Resolve valgrind error in virNetDevVlanParse()

2013-06-28 Thread John Ferlan
Commit '861d4056' introduced the following:

TEST: networkxml2xmltest
  ..   18  OK
==25504== 7 bytes in 1 blocks are definitely lost in loss record 5 of 23
==25504==at 0x4A0887C: malloc (vg_replace_malloc.c:270)
==25504==by 0x37C1085D71: strdup (strdup.c:42)
==25504==by 0x4CB835F: virStrdup (virstring.c:546)
==25504==by 0x4CC5179: virXPathString (virxml.c:90)
==25504==by 0x4CC75C2: virNetDevVlanParse (netdev_vlan_conf.c:78)
==25504==by 0x4CF928A: virNetworkPortGroupParseXML (network_conf.c:1555)
==25504==by 0x4CFE385: virNetworkDefParseXML (network_conf.c:2049)
==25504==by 0x4D0113B: virNetworkDefParseNode (network_conf.c:2273)
==25504==by 0x4D01254: virNetworkDefParse (network_conf.c:2234)
==25504==by 0x401E80: testCompareXMLToXMLHelper (networkxml2xmltest.c:32)
==25504==by 0x402D4F: virtTestRun (testutils.c:158)
==25504==by 0x401CE9: mymain (networkxml2xmltest.c:110)
==25504==
PASS: networkxml2xmltest

Also changed the label from error to cleanup and adjusted code since it's
all one exit path
---
 src/conf/netdev_vlan_conf.c | 24 +---
 1 file changed, 13 insertions(+), 11 deletions(-)

diff --git a/src/conf/netdev_vlan_conf.c b/src/conf/netdev_vlan_conf.c
index 82ff9e8..880a7ce 100644
--- a/src/conf/netdev_vlan_conf.c
+++ b/src/conf/netdev_vlan_conf.c
@@ -45,18 +45,18 @@ virNetDevVlanParse(xmlNodePtr node, xmlXPathContextPtr 
ctxt, virNetDevVlanPtr de
 
 nTags = virXPathNodeSet(./tag, ctxt, tagNodes);
 if (nTags  0)
-goto error;
+goto cleanup;
 
 if (nTags == 0) {
 virReportError(VIR_ERR_XML_ERROR, %s,
_(missing tag id - each vlan must have 
  at least one tag id='n'/ subelement));
-goto error;
+goto cleanup;
 }
 
 if (VIR_ALLOC_N(def-tag, nTags)  0) {
 virReportOOMError();
-goto error;
+goto cleanup;
 }
 
 def-nativeMode = 0;
@@ -68,18 +68,18 @@ virNetDevVlanParse(xmlNodePtr node, xmlXPathContextPtr 
ctxt, virNetDevVlanPtr de
 if (virXPathULong(string(./@id), ctxt, id)  0) {
 virReportError(VIR_ERR_XML_ERROR, %s,
_(missing or invalid vlan tag id attribute));
-goto error;
+goto cleanup;
 }
 if (id  4095) {
 virReportError(VIR_ERR_XML_ERROR,
_(vlan tag id %lu too large (maximum 4095)), id);
-goto error;
+goto cleanup;
 }
 if ((nativeMode = virXPathString(string(./@nativeMode), ctxt))) {
 if (def-nativeMode != 0) {
 virReportError(VIR_ERR_XML_ERROR, %s,
_(duplicate native vlan setting));
-goto error;
+goto cleanup;
 }
 if ((def-nativeMode
  = virNativeVlanModeTypeFromString(nativeMode)) = 0) {
@@ -87,8 +87,9 @@ virNetDevVlanParse(xmlNodePtr node, xmlXPathContextPtr ctxt, 
virNetDevVlanPtr de
_(Invalid \nativeMode='%s'\ 
  in vlan tag element),
nativeMode);
-goto error;
+goto cleanup;
 }
+VIR_FREE(nativeMode);
 def-nativeTag = id;
 }
 def-tag[ii] = id;
@@ -110,29 +111,30 @@ virNetDevVlanParse(xmlNodePtr node, xmlXPathContextPtr 
ctxt, virNetDevVlanPtr de
 virReportError(VIR_ERR_XML_ERROR,
_(invalid \trunk='%s'\ in vlan - 
trunk='yes' 
  is required for more than one vlan tag), 
trunk);
-goto error;
+goto cleanup;
 }
 if (def-nativeMode != 0) {
 virReportError(VIR_ERR_XML_ERROR, %s,
_(invalid configuration in vlan - 
\trunk='no'\ is 
  not allowed with a native vlan id));
-goto error;
+goto cleanup;
 }
 /* allow (but discard) trunk='no' if there is a single tag */
 if (STRCASENEQ(trunk, no)) {
 virReportError(VIR_ERR_XML_ERROR,
_(invalid \trunk='%s'\ in vlan 
  - must be yes or no), trunk);
-goto error;
+goto cleanup;
 }
 }
 }
 
 ret = 0;
-error:
+cleanup:
 ctxt-node = save;
 VIR_FREE(tagNodes);
 VIR_FREE(trunk);
+VIR_FREE(nativeMode);
 if (ret  0)
 virNetDevVlanClear(def);
 return ret;
-- 
1.8.1.4

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


Re: [libvirt] [PATCH 1/4] Resolve valgrind error in virNetDevVlanParse()

2013-06-28 Thread Laine Stump
On 06/28/2013 03:25 PM, John Ferlan wrote:
 Commit '861d4056' introduced the following:

 TEST: networkxml2xmltest
   ..   18  OK
 ==25504== 7 bytes in 1 blocks are definitely lost in loss record 5 of 23
 ==25504==at 0x4A0887C: malloc (vg_replace_malloc.c:270)
 ==25504==by 0x37C1085D71: strdup (strdup.c:42)
 ==25504==by 0x4CB835F: virStrdup (virstring.c:546)
 ==25504==by 0x4CC5179: virXPathString (virxml.c:90)
 ==25504==by 0x4CC75C2: virNetDevVlanParse (netdev_vlan_conf.c:78)
 ==25504==by 0x4CF928A: virNetworkPortGroupParseXML (network_conf.c:1555)
 ==25504==by 0x4CFE385: virNetworkDefParseXML (network_conf.c:2049)
 ==25504==by 0x4D0113B: virNetworkDefParseNode (network_conf.c:2273)
 ==25504==by 0x4D01254: virNetworkDefParse (network_conf.c:2234)
 ==25504==by 0x401E80: testCompareXMLToXMLHelper (networkxml2xmltest.c:32)
 ==25504==by 0x402D4F: virtTestRun (testutils.c:158)
 ==25504==by 0x401CE9: mymain (networkxml2xmltest.c:110)
 ==25504==
 PASS: networkxml2xmltest

 Also changed the label from error to cleanup and adjusted code since it's
 all one exit path
 ---

ACK.

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list