From 877b7eee3f42300b4ed45c8226d7bf1ba367a3b9 Mon Sep 17 00:00:00 2001 From: Michael R Sweet Date: Sat, 20 Jun 2026 20:34:12 -0400 Subject: [PATCH] Clear USB fault when getting device ID (Issue #1606) --- backend/usb-libusb.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) 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); } -- 2.47.3