From: Peter Krempa Date: Thu, 30 Oct 2014 10:52:17 +0000 (+0100) Subject: util: storage: Copy hosts of a storage file only if they exist X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=c264ea58e9a34b7202d8041687621dfa68ad8750;p=libvirt.git 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. --- diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c index 1c437a9b0a..8ca2d8d9f9 100644 --- a/src/util/virstoragefile.c +++ b/src/util/virstoragefile.c @@ -1851,9 +1851,12 @@ virStorageSourceCopy(const virStorageSource *src, VIR_STRDUP(ret->compat, src->compat) < 0) goto error; - if (!(ret->hosts = virStorageNetHostDefCopy(src->nhosts, src->hosts))) - goto error; - ret->nhosts = src->nhosts; + 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))) - goto error; - ret->nhosts = parent->nhosts; + 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;