From 68bd52920ce6043678f6d19d1f221930e7a214d5 Mon Sep 17 00:00:00 2001 From: Pete Batard Date: Wed, 27 Nov 2013 22:02:55 +0000 Subject: [PATCH] Windows: Fix a crash when HID transfers return no data * Issue reported by Surmakyynis * Closes #160 --- libusb/os/windows_usb.c | 26 ++++++++++++++------------ libusb/version_nano.h | 2 +- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/libusb/os/windows_usb.c b/libusb/os/windows_usb.c index b11cb93..aa4c0f4 100644 --- a/libusb/os/windows_usb.c +++ b/libusb/os/windows_usb.c @@ -4161,19 +4161,21 @@ static int hid_copy_transfer_data(int sub_api, struct usbi_transfer *itransfer, if (transfer_priv->hid_buffer != NULL) { // If we have a valid hid_buffer, it means the transfer was async if (transfer_priv->hid_dest != NULL) { // Data readout - // First, check for overflow - if (corrected_size > transfer_priv->hid_expected_size) { - usbi_err(ctx, "OVERFLOW!"); - corrected_size = (uint32_t)transfer_priv->hid_expected_size; - r = LIBUSB_TRANSFER_OVERFLOW; - } + if (corrected_size > 0) { + // First, check for overflow + if (corrected_size > transfer_priv->hid_expected_size) { + usbi_err(ctx, "OVERFLOW!"); + corrected_size = (uint32_t)transfer_priv->hid_expected_size; + r = LIBUSB_TRANSFER_OVERFLOW; + } - if (transfer_priv->hid_buffer[0] == 0) { - // Discard the 1 byte report ID prefix - corrected_size--; - memcpy(transfer_priv->hid_dest, transfer_priv->hid_buffer+1, corrected_size); - } else { - memcpy(transfer_priv->hid_dest, transfer_priv->hid_buffer, corrected_size); + if (transfer_priv->hid_buffer[0] == 0) { + // Discard the 1 byte report ID prefix + corrected_size--; + memcpy(transfer_priv->hid_dest, transfer_priv->hid_buffer+1, corrected_size); + } else { + memcpy(transfer_priv->hid_dest, transfer_priv->hid_buffer, corrected_size); + } } transfer_priv->hid_dest = NULL; } diff --git a/libusb/version_nano.h b/libusb/version_nano.h index e9bdb4e..d88c0cc 100644 --- a/libusb/version_nano.h +++ b/libusb/version_nano.h @@ -1 +1 @@ -#define LIBUSB_NANO 10850 +#define LIBUSB_NANO 10851 -- 2.7.4