From 6f225f84b1ef5a3836db26b48ace3dc3358d4200 Mon Sep 17 00:00:00 2001 From: Ivailo Monev Date: Fri, 29 Apr 2022 09:12:16 +0300 Subject: [PATCH] kinfocenter: check libusb functions return values from usbview module Signed-off-by: Ivailo Monev --- kinfocenter/Modules/usbview/usbdevices.cpp | 19 ++++++++++++++----- kinfocenter/Modules/usbview/usbdevices.h | 2 +- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/kinfocenter/Modules/usbview/usbdevices.cpp b/kinfocenter/Modules/usbview/usbdevices.cpp index 6ab598e5..78f671c6 100644 --- a/kinfocenter/Modules/usbview/usbdevices.cpp +++ b/kinfocenter/Modules/usbview/usbdevices.cpp @@ -143,18 +143,29 @@ QString USBDevice::dump() { return r; } -bool USBDevice::init() { +void USBDevice::init() { _devices.clear(); struct libusb_context *libusbctx = nullptr; - libusb_init(&libusbctx); + int libusbstatus = libusb_init(&libusbctx); + if (libusbstatus != LIBUSB_SUCCESS) { + kWarning() << libusb_error_name(libusbstatus); + return; + } + struct libusb_device **libusbdevices = nullptr; const size_t libusbdevicessize = libusb_get_device_list(libusbctx, &libusbdevices); // qDebug() << Q_FUNC_INFO << libusbdevicessize; for (size_t i = 0; i < libusbdevicessize; i++) { USBDevice* device = new USBDevice(); struct libusb_device_descriptor libusbdevice; - libusb_get_device_descriptor(libusbdevices[i], &libusbdevice); + ::memset(&libusbdevice, 0, sizeof(struct libusb_device_descriptor)); + libusbstatus = libusb_get_device_descriptor(libusbdevices[i], &libusbdevice); + if (libusbstatus != LIBUSB_SUCCESS) { + kWarning() << libusb_error_name(libusbstatus); + _devices.clear(); + break; + } // qDebug() << Q_FUNC_INFO << libusbdevice.idVendor << libusbdevice.idProduct; device->_bus = libusb_get_bus_number(libusbdevices[i]); @@ -193,6 +204,4 @@ bool USBDevice::init() { } libusb_free_device_list(libusbdevices, 1); libusb_exit(libusbctx); - - return (libusbdevicessize > 0); } diff --git a/kinfocenter/Modules/usbview/usbdevices.h b/kinfocenter/Modules/usbview/usbdevices.h index 3f2d423a..b1cbc571 100644 --- a/kinfocenter/Modules/usbview/usbdevices.h +++ b/kinfocenter/Modules/usbview/usbdevices.h @@ -42,7 +42,7 @@ public: return _devices; } static USBDevice *find(int bus, int device); - static bool init(); + static void init(); private: static QList _devices; -- 2.11.0