util: storage: Copy hosts of a storage file only if they exist

If there are no hosts for a storage source virStorageSourceCopy and
virStorageSourceNewFromBackingRelative would try to copy them anyways.
As the success of virStorageNetHostDefCopy is determined by returning
a pointer and malloc of 0 elements might return NULL according to the
implementation, the result of the copy function may vary.

Fix this by copying the hosts array only if there are hosts defined.
This commit is contained in:
Peter Krempa 2014-10-30 11:52:17 +01:00
parent ceb3e59530
commit c264ea58e9

View File

@ -1851,9 +1851,12 @@ virStorageSourceCopy(const virStorageSource *src,
VIR_STRDUP(ret->compat, src->compat) < 0)
goto error;
if (src->nhosts) {
if (!(ret->hosts = virStorageNetHostDefCopy(src->nhosts, src->hosts)))
goto error;
ret->nhosts = src->nhosts;
}
if (src->srcpool &&
!(ret->srcpool = virStorageSourcePoolDefCopy(src->srcpool)))
@ -2092,9 +2095,13 @@ virStorageSourceNewFromBackingRelative(virStorageSourcePtr parent,
/* copy the host network part */
ret->protocol = parent->protocol;
if (!(ret->hosts = virStorageNetHostDefCopy(parent->nhosts, parent->hosts)))
if (parent->nhosts) {
if (!(ret->hosts = virStorageNetHostDefCopy(parent->nhosts,
parent->hosts)))
goto error;
ret->nhosts = parent->nhosts;
}
if (VIR_STRDUP(ret->volume, parent->volume) < 0)
goto error;