VirtualBox

Changeset 54729 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Mar 12, 2015 5:21:24 AM (10 years ago)
Author:
vboxsync
Message:

VBoxUSB: use try/catch to handle possible errors and set the last element to NULL according to the recommendations

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbRt.cpp

    r50349 r54729  
    601601        return STATUS_INSUFFICIENT_RESOURCES;
    602602    }
    603 
     603       
    604604    for (i = 0; i < pCfgDr->bNumInterfaces; i++)
    605605    {
    606606        pIfLe[i].InterfaceDescriptor = USBD_ParseConfigurationDescriptorEx(pCfgDr, pCfgDr, i, 0, -1, -1, -1);
     607                pIfLe[i].Interface = NULL;
    607608        if (!pIfLe[i].InterfaceDescriptor)
    608609        {
     
    612613        }
    613614    }
    614 
     615        pIfLe[pCfgDr->bNumInterfaces].InterfaceDescriptor = NULL;
     616       
    615617    if (NT_SUCCESS(Status))
    616618    {
     
    659661                        *pDevExt->Rt.pVBIfaceInfo[i].pInterfaceInfo = *pIfLe[i].Interface;
    660662
    661                         for (ULONG j = 0; j < pIfLe[i].Interface->NumberOfPipes; j++)
    662                         {
    663                             pDevExt->Rt.pVBIfaceInfo[i].pInterfaceInfo->Pipes[j] = pIfLe[i].Interface->Pipes[j];
    664                             pDevExt->Rt.pVBIfaceInfo[i].pPipeInfo[j].EndpointAddress = pIfLe[i].Interface->Pipes[j].EndpointAddress;
    665                             pDevExt->Rt.pVBIfaceInfo[i].pPipeInfo[j].NextScheduledFrame = 0;
    666                         }
     663                                                // AM try/catch for handle citrix case with wrong data from device.
     664                                                __try
     665                                                {
     666                                                        for (ULONG j = 0; j < pIfLe[i].Interface->NumberOfPipes; j++)
     667                                                        {
     668                                                                pDevExt->Rt.pVBIfaceInfo[i].pInterfaceInfo->Pipes[j] = pIfLe[i].Interface->Pipes[j];
     669                                                                pDevExt->Rt.pVBIfaceInfo[i].pPipeInfo[j].EndpointAddress = pIfLe[i].Interface->Pipes[j].EndpointAddress;
     670                                                                pDevExt->Rt.pVBIfaceInfo[i].pPipeInfo[j].NextScheduledFrame = 0;
     671                                                        }
     672                                                }
     673                                                __except (EXCEPTION_EXECUTE_HANDLER)
     674                                                {
     675                                                        Status = GetExceptionCode();
     676                                                        break;
     677                                                }
    667678                    }
    668679
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette