]> git.sur5r.net Git - openocd/commitdiff
Prevent segfault when the USB product string cannot be retrieved
authorJörg Wunsch <openocd@uriah.heep.sax.de>
Fri, 14 Mar 2014 09:50:36 +0000 (10:50 +0100)
committerSpencer Oliver <spen@spen-soft.co.uk>
Mon, 17 Mar 2014 12:48:29 +0000 (12:48 +0000)
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>
src/jtag/drivers/cmsis_dap_usb.c

index f4d08ca9720c9e19302aca353cd880cb1e2323bf..504b3d00879e28a5db1aeec145e6fabeeee12c0d 100644 (file)
@@ -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