Problem:
  If there is a device with product ID 0x7f on the bus, and the matched 
product
  id is 0x7d,  (where clearly 0x7f != 0x7d),  hid_compare_usb_device() 
will return
  true (that there is a match).

Reason:
   In hid_compare_usb_device(),   The logic:

         if (dev->descriptor.idVendor & match->vendor_id) == 
match->vendor_id) {

and

  if ((dev->descriptor.idProduct & match->product_id) == 
match->product_id) {

are wrong.  They should read

         if (dev->descriptor.idVendor  == match->vendor_id) {

        if (dev->descriptor.idProduct  == match->product_id) {

And here is why.    Say dev->descriptor.idProduct = 0x7f and 
match->product_id = 0x7d.
    (0x7f & 0x7d) == 0x7d

The only problem is that I'm trying to find a 0x7d product, and libhid 
is saying that 0x7f is
a match and trying to opening it.   If 0x7f is already open, a lot of 
other weird and unexpected things can happen.

Warren

_______________________________________________
libhid-discuss mailing list
[email protected]
http://lists.alioth.debian.org/mailman/listinfo/libhid-discuss

Reply via email to