From: Chris Dickens Date: Mon, 27 Mar 2017 03:37:41 +0000 (-0700) Subject: Windows: Fix possible memory leak when caching descriptors fails X-Git-Tag: upstream/1.0.22~116 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=05b0b55b75278be33c5cb4c4d775c3035964e031;p=platform%2Fupstream%2Flibusb.git Windows: Fix possible memory leak when caching descriptors fails Signed-off-by: Chris Dickens --- diff --git a/libusb/os/windows_winusb.c b/libusb/os/windows_winusb.c index bccedb9..2371096 100644 --- a/libusb/os/windows_winusb.c +++ b/libusb/os/windows_winusb.c @@ -974,6 +974,16 @@ static int cache_config_descriptors(struct libusb_device *dev, HANDLE hub_handle LOOP_BREAK(LIBUSB_ERROR_NO_MEM); memcpy(priv->config_descriptor[i], cd_data, cd_data->wTotalLength); } + + // Any failure will result in dev->num_configurations being forced to 0. + // We need to release any memory that may have been allocated for config + // descriptors that were successfully retrieved, otherwise that memory + // will be leaked + if (r != LIBUSB_SUCCESS) { + for (i = 0; i < dev->num_configurations; i++) + free(priv->config_descriptor[i]); + } + return r; } diff --git a/libusb/os/windows_winusb.h b/libusb/os/windows_winusb.h index b7b9cd9..1c8ee34 100644 --- a/libusb/os/windows_winusb.h +++ b/libusb/os/windows_winusb.h @@ -244,10 +244,8 @@ static inline void windows_device_priv_release(struct libusb_device *dev) int i; free(p->path); - if ((dev->num_configurations > 0) && (p->config_descriptor != NULL)) { - for (i = 0; i < dev->num_configurations; i++) - free(p->config_descriptor[i]); - } + for (i = 0; i < dev->num_configurations; i++) + free(p->config_descriptor[i]); free(p->config_descriptor); free(p->hid); for (i = 0; i < USB_MAXINTERFACES; i++) { diff --git a/libusb/version_nano.h b/libusb/version_nano.h index f75412b..e2bf2ec 100644 --- a/libusb/version_nano.h +++ b/libusb/version_nano.h @@ -1 +1 @@ -#define LIBUSB_NANO 11195 +#define LIBUSB_NANO 11196