diff -up cups-1.4rc1/backend/ieee1284.c.device-id cups-1.4rc1/backend/ieee1284.c --- cups-1.4rc1/backend/ieee1284.c.device-id 2009-07-18 18:25:38.355769382 +0100 +++ cups-1.4rc1/backend/ieee1284.c 2009-07-18 18:25:43.844894365 +0100 @@ -196,12 +196,19 @@ backendGetDeviceID( * and then limit the length to the size of our buffer... */ - if (length > (device_id_size - 2)) + if (length > device_id_size) length = (((unsigned)device_id[1] & 255) << 8) + ((unsigned)device_id[0] & 255); - if (length > (device_id_size - 2)) - length = device_id_size - 2; + if (length > device_id_size) + length = device_id_size; + + /* + * The length field counts the number of bytes in the string + * including the length field itself (2 bytes). + */ + + length -= 2; /* * Copy the device ID text to the beginning of the buffer and diff -up cups-1.4rc1/backend/usb-libusb.c.device-id cups-1.4rc1/backend/usb-libusb.c --- cups-1.4rc1/backend/usb-libusb.c.device-id 2009-01-14 19:46:43.000000000 +0000 +++ cups-1.4rc1/backend/usb-libusb.c 2009-07-18 18:25:43.845895048 +0100 @@ -418,12 +418,14 @@ get_device_id(usb_printer_t *printer, /* * and then limit the length to the size of our buffer... */ - if (length > (bufsize - 2)) + if (length > bufsize) length = (((unsigned)buffer[1] & 255) << 8) + ((unsigned)buffer[0] & 255); - if (length > (bufsize - 2)) - length = bufsize - 2; + if (length > bufsize) + length = bufsize; + + length -= 2; /* * Copy the device ID text to the beginning of the buffer and