| 
      
      
      From: Dan E. <Dan...@ne...> - 2006-08-23 15:12:03
      
     | 
| There's a small memory leak in usb_control_msg, in the case that
usb_io_sync fails and it's an OUT, then the malloced block doesn't get
freed:
  /* out request? */
  if(!(requesttype & USB_ENDPOINT_IN))
    {
      if(!(out =3D malloc(sizeof(libusb_request) + size)))
        {
          usb_error("usb_control_msg: memory allocation failed");=20
          return -ENOMEM;
        }
     =20
      memcpy(out, &req, sizeof(libusb_request));
      memcpy((char *)out + sizeof(libusb_request), bytes, size);
      out_size =3D sizeof(libusb_request) + size;
    }
  if(!usb_io_sync(dev->impl_info, code, out, out_size, in, in_size,
&read))
    {
      usb_error("usb_control_msg: sending control message failed, "
                "win error: %s", usb_win_error_to_string());
      return -usb_win_error_to_errno();
    }
  /* out request? */
  if(!(requesttype & USB_ENDPOINT_IN))
    {
      free(out);
      return size;
    }
  else
    return read;
Dan.
 |