diff options
author | Chris Dickens <christopher.a.dickens@gmail.com> | 2018-02-24 02:02:03 -0800 |
---|---|---|
committer | Chris Dickens <christopher.a.dickens@gmail.com> | 2018-02-24 02:02:03 -0800 |
commit | 8e03a6586c54626fe8e62016258f7238f1872978 (patch) | |
tree | 7a87e436a944622ce59f60820b91543185c85c8b | |
parent | 8551e4a7a27c1aafac3138d0fb23821bfe3bf180 (diff) | |
download | libusb-8e03a6586c54626fe8e62016258f7238f1872978.tar.gz |
Windows: UsbDk: Implement get_config_descriptor_by_value()
This fixes a NULL pointer dereference when the user selects the UsbDk
backend and subsequently calls libusb_get_config_descriptor_by_value().
Closes #395
Signed-off-by: Chris Dickens <christopher.a.dickens@gmail.com>
-rw-r--r-- | libusb/os/windows_usbdk.c | 22 | ||||
-rw-r--r-- | libusb/version_nano.h | 2 |
2 files changed, 21 insertions, 3 deletions
diff --git a/libusb/os/windows_usbdk.c b/libusb/os/windows_usbdk.c index 6b16675..1355000 100644 --- a/libusb/os/windows_usbdk.c +++ b/libusb/os/windows_usbdk.c @@ -370,7 +370,25 @@ static int usbdk_get_config_descriptor(struct libusb_device *dev, uint8_t config return (int)size; } -static inline int usbdk_get_active_config_descriptor(struct libusb_device *dev, unsigned char *buffer, size_t len) +static int usbdk_get_config_descriptor_by_value(struct libusb_device *dev, uint8_t bConfigurationValue, + unsigned char **buffer) +{ + struct usbdk_device_priv *priv = _usbdk_device_priv(dev); + PUSB_CONFIGURATION_DESCRIPTOR config_header; + uint8_t index; + + for (index = 0; index < dev->num_configurations; index++) { + config_header = priv->config_descriptors[index]; + if (config_header->bConfigurationValue == bConfigurationValue) { + *buffer = (unsigned char *)priv->config_descriptors[index]; + return (int)config_header->wTotalLength; + } + } + + return LIBUSB_ERROR_NOT_FOUND; +} + +static int usbdk_get_active_config_descriptor(struct libusb_device *dev, unsigned char *buffer, size_t len) { return usbdk_get_config_descriptor(dev, _usbdk_device_priv(dev)->active_configuration, buffer, len); @@ -794,7 +812,7 @@ const struct windows_backend usbdk_backend = { usbdk_get_device_descriptor, usbdk_get_active_config_descriptor, usbdk_get_config_descriptor, - NULL,//usbdk_get_config_descriptor_by_value, + usbdk_get_config_descriptor_by_value, usbdk_get_configuration, usbdk_set_configuration, usbdk_claim_interface, diff --git a/libusb/version_nano.h b/libusb/version_nano.h index 5d22c03..1617e40 100644 --- a/libusb/version_nano.h +++ b/libusb/version_nano.h @@ -1 +1 @@ -#define LIBUSB_NANO 11300 +#define LIBUSB_NANO 11301 |