From: Michael R Sweet Date: Sun, 21 Jun 2026 00:34:12 +0000 (-0400) Subject: Clear USB fault when getting device ID (Issue #1606) X-Git-Url: http://git.ipfire.org/gitweb/?a=commitdiff_plain;p=thirdparty%2Fcups.git Clear USB fault when getting device ID (Issue #1606) --- diff --git a/backend/usb-libusb.c b/backend/usb-libusb.c index 51852b658f..9eb8254e51 100644 --- a/backend/usb-libusb.c +++ b/backend/usb-libusb.c @@ -1,7 +1,7 @@ /* * LIBUSB interface code for CUPS. * - * Copyright © 2020-2025 by OpenPrinting. + * Copyright © 2020-2026 by OpenPrinting. * Copyright © 2007-2019 by Apple Inc. * * Licensed under Apache License v2.0. See the file "LICENSE" for more @@ -1082,16 +1082,15 @@ get_device_id(usb_printer_t *printer, /* I - Printer */ char *buffer, /* I - String buffer */ size_t bufsize) /* I - Number of bytes in buffer */ { - size_t length; /* Length of device ID */ + int err; /* libusb error */ + size_t length; /* Length of device ID */ - if (libusb_control_transfer(printer->handle, - LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_ENDPOINT_IN | - LIBUSB_RECIPIENT_INTERFACE, - 0, printer->conf, - (printer->iface << 8) | printer->altset, - (unsigned char *)buffer, bufsize, 5000) < 0) + if ((err = libusb_control_transfer(printer->handle, LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_ENDPOINT_IN | LIBUSB_RECIPIENT_INTERFACE, 0, printer->conf, (printer->iface << 8) | printer->altset, (unsigned char *)buffer, bufsize, 5000)) < 0) { + if (err == LIBUSB_ERROR_PIPE) + libusb_clear_halt(printer->handle, printer->read_endp); + *buffer = '\0'; return (-1); }