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 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list