kopia lustrzana https://gitlab.com/sane-project/backends
When getting string descriptors, ask for the length of the descriptor first (bug
#301001).merge-requests/1/head
rodzic
1c1479d919
commit
2a36618fa2
|
@ -1,3 +1,8 @@
|
||||||
|
2004-10-18 Henning Meier-Geinitz <henning@meier-geinitz.de>
|
||||||
|
|
||||||
|
* tools/sane-find-scanner.c: When getting string descriptors, ask
|
||||||
|
for the length of the descriptor first (bug #301001).
|
||||||
|
|
||||||
2004-10-18 Ullrich Sigwanz <usigwanz@freesurf.ch>
|
2004-10-18 Ullrich Sigwanz <usigwanz@freesurf.ch>
|
||||||
|
|
||||||
* backend/niash_core.c:
|
* backend/niash_core.c:
|
||||||
|
|
|
@ -385,20 +385,45 @@ static char *
|
||||||
get_libusb_string_descriptor (struct usb_device *dev, int index)
|
get_libusb_string_descriptor (struct usb_device *dev, int index)
|
||||||
{
|
{
|
||||||
usb_dev_handle *handle;
|
usb_dev_handle *handle;
|
||||||
char *buffer;
|
char *buffer, short_buffer[2];
|
||||||
struct usb_string_descriptor *sd;
|
struct usb_string_descriptor *sd;
|
||||||
int size = 100;
|
int size = 2;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (!index)
|
if (!index)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
|
||||||
|
handle = usb_open (dev);
|
||||||
|
if (!handle)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
sd = (struct usb_string_descriptor *) short_buffer;
|
||||||
|
|
||||||
|
if (usb_control_msg (handle,
|
||||||
|
USB_ENDPOINT_IN + USB_TYPE_STANDARD + USB_RECIP_DEVICE,
|
||||||
|
USB_REQ_GET_DESCRIPTOR,
|
||||||
|
(USB_DT_STRING << 8) + index, 0, short_buffer,
|
||||||
|
size, 1000) < 0)
|
||||||
|
{
|
||||||
|
usb_close (handle);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sd->bLength < 2
|
||||||
|
|| sd->bDescriptorType != USB_DT_STRING)
|
||||||
|
{
|
||||||
|
usb_close (handle);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
size = sd->bLength;
|
||||||
|
|
||||||
buffer = calloc (1, size + 1);
|
buffer = calloc (1, size + 1);
|
||||||
if (!buffer)
|
if (!buffer)
|
||||||
return 0;
|
return 0;
|
||||||
sd = (struct usb_string_descriptor *) buffer;
|
sd = (struct usb_string_descriptor *) buffer;
|
||||||
handle = usb_open (dev);
|
|
||||||
if (!handle)
|
|
||||||
return 0;
|
|
||||||
if (usb_control_msg (handle,
|
if (usb_control_msg (handle,
|
||||||
USB_ENDPOINT_IN + USB_TYPE_STANDARD + USB_RECIP_DEVICE,
|
USB_ENDPOINT_IN + USB_TYPE_STANDARD + USB_RECIP_DEVICE,
|
||||||
USB_REQ_GET_DESCRIPTOR,
|
USB_REQ_GET_DESCRIPTOR,
|
||||||
|
@ -408,6 +433,7 @@ get_libusb_string_descriptor (struct usb_device *dev, int index)
|
||||||
usb_close (handle);
|
usb_close (handle);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sd->bLength < 2 || sd->bLength > size
|
if (sd->bLength < 2 || sd->bLength > size
|
||||||
|| sd->bDescriptorType != USB_DT_STRING)
|
|| sd->bDescriptorType != USB_DT_STRING)
|
||||||
{
|
{
|
||||||
|
|
Ładowanie…
Reference in New Issue