The following reply was made to PR usb/146367; it has been noted by GNATS.

From: dfil...@freebsd.org (dfilter service)
To: bug-follo...@freebsd.org
Cc:  
Subject: Re: usb/146367: commit references a PR
Date: Sun,  9 May 2010 09:21:02 +0000 (UTC)

 Author: kaiw
 Date: Sun May  9 09:20:25 2010
 New Revision: 207812
 URL: http://svn.freebsd.org/changeset/base/207812
 
 Log:
   Catch up with libusbhid merge (rev 205728).
   
   hid_get_data() now expects that the hid data passed in always contains
   the report ID byte. Thus we should not skip the the report ID byte in
   hid_interrupt().  Also, if HUP_KEYBOARD usage is an array, do not try
   to modify the 'data' pointer, instead, increase the hid_item_t field
   'pos' by 'report_size' before calling hid_get_data() during each
   iteration.
   
   PR:                  usb/146367
   Reported and tested by:      Alex Deiter
   Pointy hat to:               kaiw
   Reviewed by:         emax
 
 Modified:
   head/usr.sbin/bluetooth/bthidd/hid.c
 
 Modified: head/usr.sbin/bluetooth/bthidd/hid.c
 ==============================================================================
 --- head/usr.sbin/bluetooth/bthidd/hid.c       Sun May  9 08:22:33 2010        
(r207811)
 +++ head/usr.sbin/bluetooth/bthidd/hid.c       Sun May  9 09:20:25 2010        
(r207812)
 @@ -130,7 +130,7 @@ hid_interrupt(bthid_session_p s, uint8_t
        hid_item_t      h;
        int32_t         report_id, usage, page, val,
                        mouse_x, mouse_y, mouse_z, mouse_butt,
 -                      mevents, kevents;
 +                      mevents, kevents, i;
  
        assert(s != NULL);
        assert(s->srv != NULL);
 @@ -150,8 +150,8 @@ hid_interrupt(bthid_session_p s, uint8_t
        }
  
        report_id = data[1];
 -      data += 2;
 -      len -= 2;
 +      data ++;
 +      len --;
  
        hid_device = get_hid_device(&s->bdaddr);
        assert(hid_device != NULL);
 @@ -202,17 +202,11 @@ hid_interrupt(bthid_session_p s, uint8_t
                                if (val && val < kbd_maxkey())
                                        bit_set(s->keys1, val);
  
 -                              data ++;
 -                              len --;
 -
 -                              len = min(len, h.report_size);
 -                              while (len > 0) {
 +                              for (i = 1; i < h.report_count; i++) {
 +                                      h.pos += h.report_size;
                                        val = hid_get_data(data, &h);
                                        if (val && val < kbd_maxkey())
                                                bit_set(s->keys1, val);
 -
 -                                      data ++;
 -                                      len --;
                                }
                        }
                        break;
 _______________________________________________
 svn-src-...@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"
 
_______________________________________________
freebsd-usb@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-usb
To unsubscribe, send any mail to "freebsd-usb-unsubscr...@freebsd.org"

Reply via email to