summaryrefslogtreecommitdiffstats
path: root/third_party/libusb/assign-endpoints-checks.patch
blob: 7ed09bdb2430a2e045699dccba3f1f0fbbae3131 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
diff --git a/third_party/libusb/src/libusb/os/windows_usb.c b/third_party/libusb/src/libusb/os/windows_usb.c
index 259897e..4469992 100644
--- a/third_party/libusb/src/libusb/os/windows_usb.c
+++ b/third_party/libusb/src/libusb/os/windows_usb.c
@@ -663,6 +663,12 @@ static int windows_assign_endpoints(struct libusb_device_handle *dev_handle, int
 		return r;
 	}
 
+	if (iface >= conf_desc->bNumInterfaces ||
+	    altsetting >= conf_desc->interface[iface].num_altsetting) {
+		usbi_dbg("interface %d, altsetting %d out of range", iface, altsetting);
+		return LIBUSB_ERROR_INVALID_PARAM;
+	}
+
 	if_desc = &conf_desc->interface[iface].altsetting[altsetting];
 	safe_free(priv->usb_interface[iface].endpoint);