]> xenbits.xensource.com Git - libvirt.git/commitdiff
Fixed memory leaks
authorDaniel P. Berrange <berrange@redhat.com>
Tue, 31 Jul 2007 14:27:12 +0000 (14:27 +0000)
committerDaniel P. Berrange <berrange@redhat.com>
Tue, 31 Jul 2007 14:27:12 +0000 (14:27 +0000)
ChangeLog
src/qemu_conf.c
src/xml.c
tests/qemuxml2argvtest.c
tests/qemuxml2xmltest.c

index 8e609f5c5195fae76240d70ca49208ece34c186b..3ea7f3119d142b13d4542e2d5a8fa3ccc266b58d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Tue Jul 31 10:24:23 EST 2007 Daniel P. Berrange <berrange@redhat.com>
+
+       * src/qemu_conf.c, src/xml.c, tests/qemuxml2argvtest.c,
+       tests/qemuxml2xmltest.c: Fix a couple of memory leaks
+
 Mon Jul 30 14:40:23 EST 2007 Daniel P. Berrange <berrange@redhat.com>
 
        * src/qemu_conf.c: Validate requested architecture and reject
index 4f88d21ca7f12291437bff17f060acfb143c5a87..7219cf5b2efb1915232c3e97346dc5e337731421 100644 (file)
@@ -135,6 +135,7 @@ struct qemud_network *qemudFindNetworkByName(const struct qemud_driver *driver,
 void qemudFreeVMDef(struct qemud_vm_def *def) {
     struct qemud_vm_disk_def *disk = def->disks;
     struct qemud_vm_net_def *net = def->nets;
+    struct qemud_vm_input_def *input = def->inputs;
 
     while (disk) {
         struct qemud_vm_disk_def *prev = disk;
@@ -146,6 +147,11 @@ void qemudFreeVMDef(struct qemud_vm_def *def) {
         net = net->next;
         free(prev);
     }
+    while (input) {
+        struct qemud_vm_input_def *prev = input;
+        input = input->next;
+        free(prev);
+    }
     free(def);
 }
 
index d202d502f7b18eba9fa0fe7da1504d8b01c1d084..b997ffe67493a2888f1dd7e17c0a30d17e3e6622 100644 (file)
--- a/src/xml.c
+++ b/src/xml.c
@@ -70,8 +70,11 @@ virXPathString(const char *xpath, xmlXPathContextPtr ctxt) {
     }
     obj = xmlXPathEval(BAD_CAST xpath, ctxt);
     if ((obj == NULL) || (obj->type != XPATH_STRING) ||
-        (obj->stringval == NULL) || (obj->stringval[0] == 0))
+        (obj->stringval == NULL) || (obj->stringval[0] == 0)) {
+        if (obj)
+            xmlXPathFreeObject(obj);
         return(NULL);
+    }
     ret = strdup((char *) obj->stringval);
     xmlXPathFreeObject(obj);
     if (ret == NULL) {
@@ -618,6 +621,8 @@ virDomainParseXMLOSDescHVM(virConnectPtr conn, xmlNodePtr node, virBufferPtr buf
     if (str != NULL && !strcmp(str, "localtime")) {
         virBufferAdd(buf, "(localtime 1)", 13);
     }
+    if (str)
+        free(str);
 
     virBufferAdd(buf, "))", 2);
 
index 6e77a21c5d512b103a3b09673c00fc0299fa1b6d..ea4b046588ad4e8993c1be41a3b436378876157a 100644 (file)
@@ -22,7 +22,7 @@ static int testCompareXMLToArgvFiles(const char *xml, const char *cmd) {
     char **argv = NULL;
     char **tmp = NULL;
     int ret = -1, len;
-    struct qemud_vm_def *vmdef;
+    struct qemud_vm_def *vmdef = NULL;
     struct qemud_vm vm;
 
     if (virtTestLoadFile(xml, &xmlPtr, MAX_FILE) < 0)
@@ -80,6 +80,7 @@ static int testCompareXMLToArgvFiles(const char *xml, const char *cmd) {
         free(argv);
     }
 
+    qemudFreeVMDef(vmdef);
     return ret;
 }
 
index 0895d84fe45cf0b01a4b7e75ff1b5635d2259bc5..edfee05955e5f90ea817fe86c6aa1894031cdbdf 100644 (file)
@@ -19,7 +19,7 @@ static int testCompareXMLToXMLFiles(const char *xml) {
     char *xmlPtr = &(xmlData[0]);
     char *actual = NULL;
     int ret = -1;
-    struct qemud_vm_def *vmdef;
+    struct qemud_vm_def *vmdef = NULL;
     struct qemud_vm vm;
 
     if (virtTestLoadFile(xml, &xmlPtr, MAX_FILE) < 0)
@@ -48,7 +48,7 @@ static int testCompareXMLToXMLFiles(const char *xml) {
 
  fail:
     free(actual);
-
+    qemudFreeVMDef(vmdef);
     return ret;
 }