From 5e77e87002972d3e5794a4b375cd78a5ae6dde01 Mon Sep 17 00:00:00 2001 From: Thomas Jarosch Date: Sat, 15 Jan 2011 17:06:55 +0100 Subject: [PATCH] Fix memleak on ftdi_write_data_submit() error --- src/ftdi.c | 16 +++++++++------- 1 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/ftdi.c b/src/ftdi.c index a2cc5a6..adf682f 100644 --- a/src/ftdi.c +++ b/src/ftdi.c @@ -1376,19 +1376,22 @@ static void ftdi_write_data_cb(struct libusb_transfer *transfer) struct ftdi_transfer_control *ftdi_write_data_submit(struct ftdi_context *ftdi, unsigned char *buf, int size) { struct ftdi_transfer_control *tc; - struct libusb_transfer *transfer = libusb_alloc_transfer(0); + struct libusb_transfer *transfer; int write_size, ret; if (ftdi == NULL || ftdi->usb_dev == NULL) - { - libusb_free_transfer(transfer); return NULL; - } tc = (struct ftdi_transfer_control *) malloc (sizeof (*tc)); + if (!tc) + return NULL; - if (!tc || !transfer) + transfer = libusb_alloc_transfer(0); + if (!transfer) + { + free(tc); return NULL; + } tc->ftdi = ftdi; tc->completed = 0; @@ -1410,8 +1413,7 @@ struct ftdi_transfer_control *ftdi_write_data_submit(struct ftdi_context *ftdi, if (ret < 0) { libusb_free_transfer(transfer); - tc->completed = 1; - tc->transfer = NULL; + free(tc); return NULL; } tc->transfer = transfer; -- 1.7.1