From: Matthias Bolte Date: Sun, 22 Apr 2012 08:31:33 +0000 (+0200) Subject: vbox: Fix passing an empty IMedium* array to IMachine::Delete X-Git-Tag: v0.9.12-rc1~44 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a9bc123ea3b613e456bc297761861f93196fc416;p=thirdparty%2Flibvirt.git vbox: Fix passing an empty IMedium* array to IMachine::Delete vboxArray is not castable to a COM item type. vboxArray is a wrapper around the XPCOM and MSCOM specific array handling. In this case we can avoid passing NULL as an empty array to IMachine::Delete by passing a dummy IMedium* array with a single NULL item. --- diff --git a/src/vbox/vbox_tmpl.c b/src/vbox/vbox_tmpl.c index 57c18a432e..4b0ee2efce 100644 --- a/src/vbox/vbox_tmpl.c +++ b/src/vbox/vbox_tmpl.c @@ -5294,11 +5294,10 @@ vboxDomainUndefineFlags(virDomainPtr dom, unsigned int flags) ((IMachine_Delete)machine->vtbl->Delete)(machine, &safeArray, &progress); # else - union { - vboxArray array; - IMedium *medium; - } u = { .array = VBOX_ARRAY_INITIALIZER }; - machine->vtbl->Delete(machine, 0, &u.medium, &progress); + /* XPCOM doesn't like NULL as an array, even when the array size is 0. + * Instead pass it a dummy array to avoid passing NULL. */ + IMedium *array[] = { NULL }; + machine->vtbl->Delete(machine, 0, array, &progress); # endif if (progress != NULL) { progress->vtbl->WaitForCompletion(progress, -1);