
<...snip...?>> diff --git a/tests/storagevolxml2argvtest.c b/tests/storagevolxml2argvtest.c
index b220994..3c338ce 100644 --- a/tests/storagevolxml2argvtest.c +++ b/tests/storagevolxml2argvtest.c @@ -11,10 +11,32 @@
const char create_tool[] = "qemu-img";
+/* createVol sets this on volume creation */ +static void +testSetVolumeType(virStorageVolDefPtr vol, + virStoragePoolDefPtr pool) +{ + if (!vol) + return; + + switch (pool->type) { + case VIR_STORAGE_POOL_DIR: + case VIR_STORAGE_POOL_FS: + case VIR_STORAGE_POOL_NETFS: + vol->type = VIR_STORAGE_VOL_FILE; + return; + + case VIR_STORAGE_POOL_LOGICAL: + vol->type = VIR_STORAGE_VOL_BLOCK; + return; + } +} + static int testCompareXMLToArgvFiles(bool shouldFail, const char *poolxml, const char *volxml, + const char *inputpoolxml, const char *inputvolxml, const char *cmdline, unsigned int flags, @@ -22,6 +44,7 @@ testCompareXMLToArgvFiles(bool shouldFail, { char *volXmlData = NULL; char *poolXmlData = NULL; + char *inputpoolXmlData = NULL; char *inputvolXmlData = NULL; char *expectedCmdline = NULL; char *actualCmdline = NULL; @@ -34,6 +57,7 @@ testCompareXMLToArgvFiles(bool shouldFail,
virStorageVolDefPtr vol = NULL, inputvol = NULL; virStoragePoolDefPtr pool = NULL; + virStoragePoolDefPtr inputpool = NULL; virStoragePoolObj poolobj = {.def = NULL };
@@ -53,13 +77,23 @@ testCompareXMLToArgvFiles(bool shouldFail,
poolobj.def = pool;
+ if (inputpoolxml) { + if (virtTestLoadFile(inputpoolxml, &inputpoolXmlData) < 0) + goto cleanup; + if (!(inputpool = virStoragePoolDefParseString(inputpoolXmlData))) + goto cleanup; + } + if (!(vol = virStorageVolDefParseString(pool, volXmlData))) goto cleanup;
if (inputvolxml && - !(inputvol = virStorageVolDefParseString(pool, inputvolXmlData))) + !(inputvol = virStorageVolDefParseString(inputpool, inputvolXmlData))) goto cleanup;
+ testSetVolumeType(vol, pool); + testSetVolumeType(inputvol, inputpool);
Coverity is grumpy (FORWARD_NULL) right here as inputpool could be NULL since setting 'inputpool' has been based upon 'inputpoolxml' being true up to this point 94 testSetVolumeType(vol, pool); (13) Event var_deref_model: Passing null pointer "inputpool" to function "testSetVolumeType(virStorageVolDefPtr, virStoragePoolDefPtr)", which dereferences it. [details] Also see events: [assign_zero] 95 testSetVolumeType(inputvol, inputpool);
+ cmd = virStorageBackendCreateQemuImgCmd(conn, &poolobj, vol, inputvol, flags, create_tool, imgformat); if (!cmd) { @@ -88,11 +122,13 @@ testCompareXMLToArgvFiles(bool shouldFail,
cleanup: virStoragePoolDefFree(pool); + virStoragePoolDefFree(inputpool); virStorageVolDefFree(vol); virStorageVolDefFree(inputvol); virCommandFree(cmd); VIR_FREE(actualCmdline); VIR_FREE(expectedCmdline); + VIR_FREE(inputpoolXmlData); VIR_FREE(poolXmlData); VIR_FREE(volXmlData); VIR_FREE(inputvolXmlData); @@ -104,6 +140,7 @@ struct testInfo { bool shouldFail; const char *pool; const char *vol; + const char *inputpool; const char *inputvol; const char *cmdline; unsigned int flags; @@ -116,6 +153,7 @@ testCompareXMLToArgvHelper(const void *data) int result = -1; const struct testInfo *info = data; char *poolxml = NULL; + char *inputpoolxml = NULL; char *volxml = NULL; char *inputvolxml = NULL; char *cmdline = NULL; @@ -124,6 +162,10 @@ testCompareXMLToArgvHelper(const void *data) virAsprintf(&inputvolxml, "%s/storagevolxml2xmlin/%s.xml", abs_srcdir, info->inputvol) < 0) goto cleanup; + if (info->inputpool && + virAsprintf(&inputpoolxml, "%s/storagepoolxml2xmlin/%s.xml", + abs_srcdir, info->inputpool) < 0) + goto cleanup; if (virAsprintf(&poolxml, "%s/storagepoolxml2xmlin/%s.xml", abs_srcdir, info->pool) < 0 || virAsprintf(&volxml, "%s/storagevolxml2xmlin/%s.xml", @@ -135,13 +177,15 @@ testCompareXMLToArgvHelper(const void *data) goto cleanup;
result = testCompareXMLToArgvFiles(info->shouldFail, poolxml, volxml, - inputvolxml, cmdline, info->flags, + inputpoolxml, inputvolxml, + cmdline, info->flags, info->imgformat);
cleanup: VIR_FREE(poolxml); VIR_FREE(volxml); VIR_FREE(inputvolxml); + VIR_FREE(inputpoolxml); VIR_FREE(cmdline);
return result; <...snip...>