diff options
author | Nils Philippsen <nils@redhat.com> | 2011-05-30 17:19:47 +0200 |
---|---|---|
committer | Nils Philippsen <nils@redhat.com> | 2011-06-21 17:32:46 +0200 |
commit | d63fa164a4ffebc5247acaa3b80b0d4f2e21d926 (patch) | |
tree | adaabf848387b6badd29589f13146df712b699bb | |
parent | 4577dd767e33f358ccedeac9ca1102f8548b38fb (diff) | |
download | usbutils-d63fa164a4ffebc5247acaa3b80b0d4f2e21d926.tar.gz |
don't use invalid config descriptors
This fixes "lsusb -v" crashing if device files are present but can't be
opened.
-rw-r--r-- | lsusb.c | 23 |
1 files changed, 17 insertions, 6 deletions
@@ -3800,14 +3800,25 @@ static void dumpdev(libusb_device *dev) if (desc.bNumConfigurations) { struct libusb_config_descriptor *config; - libusb_get_config_descriptor(dev, 0, &config); - otg = do_otg(config) || otg; - libusb_free_config_descriptor(config); + ret = libusb_get_config_descriptor(dev, 0, &config); + if (ret) { + fprintf(stderr, "Couldn't get configuration descriptor 0, " + "some information will be missing\n"); + } else { + otg = do_otg(config) || otg; + libusb_free_config_descriptor(config); + } for (i = 0; i < desc.bNumConfigurations; ++i) { - libusb_get_config_descriptor(dev, i, &config); - dump_config(udev, config); - libusb_free_config_descriptor(config); + ret = libusb_get_config_descriptor(dev, i, &config); + if (ret) { + fprintf(stderr, "Couldn't get configuration " + "descriptor %d, some information will " + "be missing\n", i); + } else { + dump_config(udev, config); + libusb_free_config_descriptor(config); + } } } if (!udev) |