From 82b5dd23f30e54b7caa3b9d82f1e3819a803fda8 Mon Sep 17 00:00:00 2001 From: Ryota Ozaki Date: Sun, 1 Dec 2013 23:46:05 +0900 Subject: [PATCH] vbox: fix incorrect loop condition in vboxHostDeviceGetXMLDesc The fixed loop used logical OR to combine two conditions, however, it is apparently incorrect and logical AND is correct. We can fix it by replacing OR with AND, but this patch instead fixes the problem by getting rid of the first conditional statement: USBFilterCount < def->nhostdevs. It isn't needed because USBFilterCount will never be greater than or equal to def->nhostdevs. def->nhostdevs is calculated in the following code above the loop in question like this: for (i = 0; i < deviceFilters.count; i++) { PRBool active = PR_FALSE; IUSBDeviceFilter *deviceFilter = deviceFilters.items[i]; deviceFilter->vtbl->GetActive(deviceFilter, &active); if (active) { def->nhostdevs++; } } And the loop is constructed as like this: for (i = 0; (USBFilterCount < def->nhostdevs) || (i < deviceFilters.count); i++) { PRBool active = PR_FALSE; (snip) deviceFilter->vtbl->GetActive(deviceFilter, &active); if (!active) continue; (snip) USBFilterCount++; } So def->nhostdevs is the number of active device filters and USBFilterCount is counted up only when a device filter is active. Thus, we can remove USBFilterCount < def->nhostdevs safely. Reported-by: Laine Stump Signed-off-by: Ryota Ozaki --- src/vbox/vbox_tmpl.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vbox/vbox_tmpl.c b/src/vbox/vbox_tmpl.c index 983a59562f..cc5f275714 100644 --- a/src/vbox/vbox_tmpl.c +++ b/src/vbox/vbox_tmpl.c @@ -2269,7 +2269,7 @@ static void vboxHostDeviceGetXMLDesc(vboxGlobalData *data, virDomainDefPtr def, if (VIR_ALLOC_N(def->hostdevs, def->nhostdevs) < 0) goto release_filters; - for (i = 0; (USBFilterCount < def->nhostdevs) || (i < deviceFilters.count); i++) { + for (i = 0; i < deviceFilters.count; i++) { PRBool active = PR_FALSE; IUSBDeviceFilter *deviceFilter = deviceFilters.items[i]; PRUnichar *vendorIdUtf16 = NULL; -- 2.47.2