2015-08-08 22:18 GMT-03:00 Paul Cornelius <paul.cornel...@vuemetrix.com>:
> OK I see.
>
> I thought I had the latest release (1.0.0.a2), which I got from
> sourceforge.  I got to there by following the link on
> http://walac.github.io/pyusb/.  Also I searched exhaustively for anyone
> reporting this bug before diving into the pyusb internals. What did I do
> wrong?
>

The point is that this change was not released yet. When you find a
bug, it is better to check against git HEAD to see if it happens in
the latest code.

> Thanks,
> Paul Cornelius
>
> On 8/8/2015 12:00 PM, Wander Lairson Costa wrote:
>> Hi,
>>
>> Notice the code the get_string has changed:
>> https://github.com/walac/pyusb/blob/master/usb/util.py#L295-L340
>>
>> 2015-08-08 1:14 GMT-03:00 Paul Cornelius <paul.cornel...@vuemetrix.com>:
>>> I found a bug in usb.util.py in the function get_string.  This function was
>>> failing with an "Overflow" error on my Windows 8.1 machine, using Python 3.3
>>> and libusb-1.0.
>>>
>>> If this function is called with the default value for langid (None), it
>>> first makes a call to get_descriptor to obtain a list of languages supported
>>> by the device.  This second parameter of this function call is the size of
>>> the reply buffer, which was equal to 1024.  But a comment in the libusb-1.0
>>> source (descriptor.c, function libusb_get_string_descriptor_ascii) reads: /*
>>> Some devices choke on size > 255 */.
>>>
>>> And it seems to be true.  When I changed the get_descriptor function call to
>>> reduce the buffer size parameter to 255 the error disappeared.  I also
>>> thought it would be good to limit the size of any buffer passed to
>>> get_string.  My modified function now reads as follows:
>>>
>>> def get_string(dev, length, index, langid = None):
>>>      r"""Retrieve a string descriptor from the device.
>>>
>>>      dev is the Device object to which the request will be
>>>      sent to.
>>>
>>>      length is the length of string in number of characters.
>>>
>>>      index is the string descriptor index and langid is the Language
>>>      ID of the descriptor. If langid is omitted, the string descriptor
>>>      of the first Language ID will be returned.
>>>
>>>      The return value is the unicode string present in the descriptor.
>>>      """
>>>      from usb.control import get_descriptor
>>>      if langid is None:
>>>      # Asking for the zero'th index is special - it returns a string
>>>      # descriptor that contains all the language IDs supported by the 
>>> device.
>>>      # Typically there aren't many - often only one. The language IDs are 16
>>>      # bit numbers, and they start at the third byte in the descriptor. See
>>>      # USB 2.0 specification section 9.6.7 for more information.
>>>          #
>>>          # Note from libusb 1.0 sources (descriptor.c)
>>>          buf = get_descriptor(
>>>                      dev,
>>>                      255,
>>>                      DESC_TYPE_STRING,
>>>                      0
>>>                  )
>>>          assert len(buf) >= 4
>>>          langid = buf[2] | (buf[3] << 8)
>>>
>>>      lenstr = length * 2 + 2
>>>      if lenstr > 255:
>>>          raise ValueError("String buffer length too long")
>>>      buf = get_descriptor(
>>>                  dev,
>>>                  length * 2 + 2, # string is utf16 + 2 bytes of the
>>> descriptor
>>>                  DESC_TYPE_STRING,
>>>                  index,
>>>                  langid
>>>              )
>>>      return buf[2:].tostring().decode('utf-16-le')
>>>
>>> Paul Cornelius
>>>
>>> ------------------------------------------------------------------------------
>>>
>>> _______________________________________________
>>> pyusb-users mailing list
>>> pyusb-users@lists.sourceforge.net
>>> https://lists.sourceforge.net/lists/listinfo/pyusb-users
>>>
>>
>>
>
>
> ------------------------------------------------------------------------------
> _______________________________________________
> pyusb-users mailing list
> pyusb-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/pyusb-users



-- 
Best Regards,
Wander Lairson Costa

------------------------------------------------------------------------------
_______________________________________________
pyusb-users mailing list
pyusb-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/pyusb-users

Reply via email to