diff -ruN libusb-1.0.8/libusb/descriptor.c libusb-1.0.8-new/libusb/descriptor.c
--- libusb-1.0.8/libusb/descriptor.c	2009-06-10 22:39:07.000000000 +0200
+++ libusb-1.0.8-new/libusb/descriptor.c	2010-05-22 20:25:12.000000000 +0200
@@ -681,8 +681,13 @@
 	/* Asking for the zero'th index is special - it returns a string
 	 * descriptor that contains all the language IDs supported by the device.
 	 * Typically there aren't many - often only one. The language IDs are 16
-	 * bit numbers, and they start at the third byte in the descriptor. See
-	 * USB 2.0 specification section 9.6.7 for more information. */
+	 * bit numbers, and they start at the third byte in the descriptor. This
+	 * also make useless fetch zero index by this function. See USB 2.0
+	 * specification section 9.6.7 for more information. */
+
+	if (desc_index == 0)
+		return LIBUSB_ERROR_INVALID_PARAM;
+
 	r = libusb_get_string_descriptor(dev, 0, 0, tbuf, sizeof(tbuf));
 	if (r < 0)
 		return r;

