From 0c7db47e58e5fe267219735630cd004b504e8535 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=B6rg=20Wunsch?= Date: Fri, 14 Mar 2014 10:50:36 +0100 Subject: [PATCH] Prevent segfault when the USB product string cannot be retrieved MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 Reviewed-on: http://openocd.zylin.com/2044 Tested-by: jenkins Reviewed-by: Spencer Oliver --- src/jtag/drivers/cmsis_dap_usb.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/jtag/drivers/cmsis_dap_usb.c b/src/jtag/drivers/cmsis_dap_usb.c index f4d08ca972..504b3d0087 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 -- 2.30.2