diff options
author | Jörg Wunsch <openocd@uriah.heep.sax.de> | 2014-03-14 10:50:36 +0100 |
---|---|---|
committer | Spencer Oliver <spen@spen-soft.co.uk> | 2014-03-17 12:48:29 +0000 |
commit | 0c7db47e58e5fe267219735630cd004b504e8535 (patch) | |
tree | 41fb6dd56da980a074494a4b4ebbf9f9839f28f2 /src/jtag/drivers | |
parent | 6bc7ddeffd194444f9bae0d18a5bce8fa39d672f (diff) |
Prevent segfault when the USB product string cannot be retrieved
In the CMSIS-DAP driver, if nothing has been specified by the user, an
attempt is made to find the first device with the (mandatory)
substring "CMSIS-DAP" in any USB device's product string. However,
while (usually) all devices can be traversed, devices the user does
not have permission for cannot be read the product string from,
resulting in a NULL pointer. Trying to find the substring "CMSIS-DAP"
causes a segementation fault then.
This has also been filed as Trac bug #67:
https://sourceforge.net/apps/trac/openocd/ticket/67
Change-Id: Idfc9f072e34152e9af99fe1c8ec88c99dea4624c
Signed-off-by: Jörg Wunsch <openocd@uriah.heep.sax.de>
Reviewed-on: http://openocd.zylin.com/2044
Tested-by: jenkins
Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
Diffstat (limited to 'src/jtag/drivers')
-rw-r--r-- | src/jtag/drivers/cmsis_dap_usb.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/src/jtag/drivers/cmsis_dap_usb.c b/src/jtag/drivers/cmsis_dap_usb.c index f4d08ca9..504b3d00 100644 --- a/src/jtag/drivers/cmsis_dap_usb.c +++ b/src/jtag/drivers/cmsis_dap_usb.c @@ -173,7 +173,8 @@ static int cmsis_dap_usb_open(void) devs = hid_enumerate(0x0, 0x0); cur_dev = devs; while (NULL != cur_dev) { - if ((0 == cmsis_dap_vid[0]) && wcsstr(cur_dev->product_string, L"CMSIS-DAP")) { + if ((0 == cmsis_dap_vid[0]) && (NULL != cur_dev->product_string) + && wcsstr(cur_dev->product_string, L"CMSIS-DAP")) { /* if the user hasn't specified VID:PID *and* product string contains "CMSIS-DAP", pick it |