summaryrefslogtreecommitdiff
path: root/libusb/os/linux_usbfs.c
diff options
context:
space:
mode:
authorDaniel Drake <dsd@gentoo.org>2008-05-02 12:55:34 +0100
committerDaniel Drake <dsd@gentoo.org>2008-05-02 12:55:34 +0100
commit55bce39cbe0c9746a428b66751d1afe551d86381 (patch)
treec67bfb9615942b2e96ad1f219b159fe550546dad /libusb/os/linux_usbfs.c
parentf3f17846dcced6b2dc40f899ed6a2aba151c264b (diff)
downloadlibusb-55bce39cbe0c9746a428b66751d1afe551d86381.tar.gz
detect short descriptor reads
Diffstat (limited to 'libusb/os/linux_usbfs.c')
-rw-r--r--libusb/os/linux_usbfs.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/libusb/os/linux_usbfs.c b/libusb/os/linux_usbfs.c
index a678032..30cb9b9 100644
--- a/libusb/os/linux_usbfs.c
+++ b/libusb/os/linux_usbfs.c
@@ -166,7 +166,11 @@ static int initialize_device(struct libusb_device *dev, uint8_t busnum,
usbi_err("read failed ret=%d errno=%d", r, errno);
goto err;
}
- /* FIXME: short read handling? */
+ if (r < DEVICE_DESC_LENGTH) {
+ usbi_err("short descriptor read %d/%d", r, DEVICE_DESC_LENGTH);
+ r = -EIO;
+ goto err;
+ }
usbi_parse_descriptor(raw_desc, "bbWbbbbWWWbbbb", &dev->desc);