[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

[libvirt] [PATCH 1/4] parallels: Resolve issues with uninitialized 'ret' value



Added some messaging to indicate possible failure from virXPathULongLong()
as well
---
 src/parallels/parallels_storage.c | 19 ++++++++++++++-----
 1 file changed, 14 insertions(+), 5 deletions(-)

diff --git a/src/parallels/parallels_storage.c b/src/parallels/parallels_storage.c
index 2908bee..10206bf 100644
--- a/src/parallels/parallels_storage.c
+++ b/src/parallels/parallels_storage.c
@@ -258,7 +258,7 @@ static int parallelsDiskDescParseNode(xmlDocPtr xml,
                                       virStorageVolDefPtr def)
 {
     xmlXPathContextPtr ctxt = NULL;
-    int ret;
+    int ret = -1;
 
     if (STRNEQ((const char *)root->name, "Parallels_disk_image")) {
         virReportError(VIR_ERR_XML_ERROR,
@@ -274,12 +274,17 @@ static int parallelsDiskDescParseNode(xmlDocPtr xml,
 
     ctxt->node = root;
 
-    if (virXPathULongLong("string(./Disk_Parameters/Disk_size)",
-                          ctxt, &def->capacity))
-        ret = -1;
+    if ((ret = virXPathULongLong("string(./Disk_Parameters/Disk_size)",
+                                 ctxt, &def->capacity)) < 0) {
+        virReportError(VIR_ERR_XML_ERROR,
+                       "%s", _("failed to get disk size from "
+                               "the disk descriptor xml"));
+        goto cleanup;
+    }
 
     def->capacity <<= 9;
     def->allocation = def->capacity;
+    ret = 0;
 cleanup:
     xmlXPathFreeContext(ctxt);
     return ret;
@@ -315,7 +320,8 @@ static int parallelsAddDiskVolume(virStoragePoolObjPtr pool,
 
     def->type = VIR_STORAGE_VOL_FILE;
 
-    parallelsDiskDescParse(diskDescPath, def);
+    if (parallelsDiskDescParse(diskDescPath, def) < 0)
+        goto no_parse;
 
     if (!(def->target.path = realpath(diskPath, NULL)))
         goto no_memory;
@@ -333,6 +339,9 @@ no_memory:
     virStorageVolDefFree(def);
     virReportOOMError();
     return -1;
+no_parse:
+    virStorageVolDefFree(def);
+    return -1;
 }
 
 static int parallelsFindVmVolumes(virStoragePoolObjPtr pool,
-- 
1.7.11.7


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]