X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Modules%2FUSB%2FCore%2Fusb_lowlevel.c;h=0e53bad940bee2f6bc512b338c316f80b514f6f2;hb=4c717bb526a0a7b1aa44ed7fc4f07a6b7da5d2f9;hp=99423a735a65e53ca567afc62b58a58639e3ac63;hpb=89e41793b9d495d98633f90e6595722b8e5979d3;p=tpg%2Facess2.git diff --git a/Modules/USB/Core/usb_lowlevel.c b/Modules/USB/Core/usb_lowlevel.c index 99423a73..0e53bad9 100644 --- a/Modules/USB/Core/usb_lowlevel.c +++ b/Modules/USB/Core/usb_lowlevel.c @@ -122,8 +122,15 @@ char *USB_int_GetDeviceString(tUSBDevice *Dev, int Endpoint, int Index) struct sDescriptor_String str; int src_len, new_len; char *ret; + + if(Index == 0) return strdup(""); USB_int_ReadDescriptor(Dev, Endpoint, 3, Index, sizeof(str), &str); + if(str.Length < 2) { + Log_Error("USB", "String %p:%i:%i:%i descriptor is undersized (%i)", + Dev->Host, Dev->Address, Endpoint, Index, str.Length); + return NULL; + } // if(str.Length > sizeof(str)) { // // IMPOSSIBLE! // Log_Error("USB", "String is %i bytes, which is over prealloc size (%i)", @@ -132,6 +139,8 @@ char *USB_int_GetDeviceString(tUSBDevice *Dev, int Endpoint, int Index) // } src_len = (str.Length - 2) / sizeof(str.Data[0]); + LOG("&str = %p, src_len = %i", &str, src_len); + new_len = _UTF16to8(str.Data, src_len, NULL); ret = malloc( new_len + 1 ); _UTF16to8(str.Data, src_len, ret);