• R
    vbox: fix incorrect loop condition in vboxHostDeviceGetXMLDesc · 82b5dd23
    Ryota Ozaki 提交于
    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: NLaine Stump <laine@laine.org>
    Signed-off-by: NRyota Ozaki <ozaki.ryota@gmail.com>
    82b5dd23
vbox_tmpl.c 342.2 KB