AnsweredAssumed Answered

USB Virtual Com Port buffer overflow

Question asked by Robin on Jan 9, 2012
Latest reply on Feb 20, 2017 by asv
Hi everybody.

I've a remark to do about the "USBD_GetString(uint8_t *desc, uint8_t *unicode, uint16_t *len)" function defined in "usbd_req.c".

When it's called with the function "USBD_GetString (USBD_PRODUCT_FS_STRING, USBD_StrDesc, length);" in "usbd_desc.c",

the reserved size of "USBD_StrDesc" in memory is 50 : "__ALIGN_BEGIN uint8_t USBD_StrDesc[USB_MAX_STR_DESC_SIZ] __ALIGN_END ;" in "usbd_req.c"

with following define in "usbd_conf.h" :  "#define USB_MAX_STR_DESC_SIZ            50"

However the "USBD_PRODUCT_FS_STRING" is define in "usbd_desc.c" as "#define USBD_PRODUCT_FS_STRING          "STM32 Virtual ComPort in FS Mode" " so it's a string of 32 characters.

When USBD_GetString(...) is called it converts an ascii string to unicode string so doubles the size of the string and adds its length at the beginning. So for a string of 32 chars a size of 66 chars have to be reserved, that is 16 more than it is.

I don't know who alert about this little mistake but for me it has been a pain because it overflowed over data I used in my main application. So if it can help someone in the same case I post it.

Regards.
Robin.

Outcomes