mirror of
git://source.winehq.org/git/wine.git
synced 2024-09-02 07:55:26 +00:00
wineusb: Fix memory leaks on error paths in usb_submit_urb (scan-build).
This commit is contained in:
parent
dcb123fac8
commit
9e3f1a1506
|
@ -449,7 +449,10 @@ static NTSTATUS usb_submit_urb(void *args)
|
||||||
transfer_ctx->transfer_buffer = params->transfer_buffer;
|
transfer_ctx->transfer_buffer = params->transfer_buffer;
|
||||||
|
|
||||||
if (!(transfer = libusb_alloc_transfer(0)))
|
if (!(transfer = libusb_alloc_transfer(0)))
|
||||||
|
{
|
||||||
|
free(transfer_ctx);
|
||||||
return STATUS_NO_MEMORY;
|
return STATUS_NO_MEMORY;
|
||||||
|
}
|
||||||
irp->Tail.Overlay.DriverContext[0] = transfer;
|
irp->Tail.Overlay.DriverContext[0] = transfer;
|
||||||
|
|
||||||
if (pipe.type == UsbdPipeTypeBulk)
|
if (pipe.type == UsbdPipeTypeBulk)
|
||||||
|
@ -465,6 +468,7 @@ static NTSTATUS usb_submit_urb(void *args)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
WARN("Invalid pipe type %#x.\n", pipe.type);
|
WARN("Invalid pipe type %#x.\n", pipe.type);
|
||||||
|
free(transfer_ctx);
|
||||||
libusb_free_transfer(transfer);
|
libusb_free_transfer(transfer);
|
||||||
return USBD_STATUS_INVALID_PIPE_HANDLE;
|
return USBD_STATUS_INVALID_PIPE_HANDLE;
|
||||||
}
|
}
|
||||||
|
@ -489,11 +493,15 @@ static NTSTATUS usb_submit_urb(void *args)
|
||||||
transfer_ctx->transfer_buffer = params->transfer_buffer;
|
transfer_ctx->transfer_buffer = params->transfer_buffer;
|
||||||
|
|
||||||
if (!(transfer = libusb_alloc_transfer(0)))
|
if (!(transfer = libusb_alloc_transfer(0)))
|
||||||
|
{
|
||||||
|
free(transfer_ctx);
|
||||||
return STATUS_NO_MEMORY;
|
return STATUS_NO_MEMORY;
|
||||||
|
}
|
||||||
irp->Tail.Overlay.DriverContext[0] = transfer;
|
irp->Tail.Overlay.DriverContext[0] = transfer;
|
||||||
|
|
||||||
if (!(buffer = malloc(sizeof(struct libusb_control_setup) + req->TransferBufferLength)))
|
if (!(buffer = malloc(sizeof(struct libusb_control_setup) + req->TransferBufferLength)))
|
||||||
{
|
{
|
||||||
|
free(transfer_ctx);
|
||||||
libusb_free_transfer(transfer);
|
libusb_free_transfer(transfer);
|
||||||
return STATUS_NO_MEMORY;
|
return STATUS_NO_MEMORY;
|
||||||
}
|
}
|
||||||
|
@ -549,11 +557,15 @@ static NTSTATUS usb_submit_urb(void *args)
|
||||||
FIXME("Unhandled flags %#x.\n", (int)req->TransferFlags);
|
FIXME("Unhandled flags %#x.\n", (int)req->TransferFlags);
|
||||||
|
|
||||||
if (!(transfer = libusb_alloc_transfer(0)))
|
if (!(transfer = libusb_alloc_transfer(0)))
|
||||||
|
{
|
||||||
|
free(transfer_ctx);
|
||||||
return STATUS_NO_MEMORY;
|
return STATUS_NO_MEMORY;
|
||||||
|
}
|
||||||
irp->Tail.Overlay.DriverContext[0] = transfer;
|
irp->Tail.Overlay.DriverContext[0] = transfer;
|
||||||
|
|
||||||
if (!(buffer = malloc(sizeof(struct libusb_control_setup) + req->TransferBufferLength)))
|
if (!(buffer = malloc(sizeof(struct libusb_control_setup) + req->TransferBufferLength)))
|
||||||
{
|
{
|
||||||
|
free(transfer_ctx);
|
||||||
libusb_free_transfer(transfer);
|
libusb_free_transfer(transfer);
|
||||||
return STATUS_NO_MEMORY;
|
return STATUS_NO_MEMORY;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue