This may be good to be indexed in the libusbx mailing list as well. Whole thread: http://libusb.6.n5.nabble.com/FreeBSD-libusb-missing-libusb-get-descriptor-td5689243.html
Regards, Xiaofan ---------- Forwarded message ---------- From: Peter Stuge <pe...@stuge.se> Date: Mon, May 7, 2012 at 10:47 PM Subject: Re: FreeBSD libusb missing libusb_get_descriptor() To: libusb-de...@lists.sourceforge.net Xiaofan Chen wrote: > > Maybe you want to import some of those checks > > for the input parameters to this function. > > Thanks. Indeed the check may be good. > > Let's see Peter's view on this. Mh, I actually don't think so. I'll explain: > FreeBSD's implementation: > 296 int > 297 libusb_get_string_descriptor(libusb_device_handle *pdev, > 298 uint8_t desc_index, uint16_t langid, unsigned char *data, > 299 int length) > 300 { > 301 if (pdev == NULL || data == NULL || length < 1) > 302 return (LIBUSB_ERROR_INVALID_PARAM); Checking pdev and data is consistently not done in libusb - if you pass garbage then you get a crash. libusb wants to be thin. The USB 2.0 spec doesn't say that wLength=0 is invalid, so I think we should let that go down to the device if for whatever reason someone requests it. > 304 if (length > 65535) > 305 length = 65535; libusb-1.0 casts to uint16_t, which also truncates the value. The real error is that the API doesn't use uint16_t for the length, but that can't be fixed until next API. > 307 /* put some default data into the destination buffer */ > 308 data[0] = 0; I'd rather not do this either, I don't think it's libusb's business to mess with the data, and 0 for descriptor length doesn't make so much sense.. The return value needs to be checked, and this is just one special case of the sync API, where the actual length is never available anyway. :\ > 1369 int LIBUSB_CALL > libusb_get_string_descriptor_ascii(libusb_device_handle *dev, > 1370 uint8_t desc_index, unsigned char *data, int length); This function could very well need some love, and actually it would be nice to do something more intelligent than only support ASCII contents, such as libusb_get_string_descriptor_utf8(), but it could also be nice to offer an API which ties nicely into some or many different character set conversion libraries.. //Peter ------------------------------------------------------------------------------ Live Security Virtual Conference Exclusive live event will cover all the ways today's security and threat landscape has changed and how IT managers can respond. Discussions will include endpoint security, mobile security and the latest in malware threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ _______________________________________________ libusbx-devel mailing list libusbx-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/libusbx-devel