From: Paul Fertser Date: Thu, 26 Feb 2015 17:18:38 +0000 (+0300) Subject: jtag/tcl: fix incorrect memcpy in jim_newtap_expected_id X-Git-Tag: v0.9.0-rc1~34 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=20fcd0729e7187e8fe6a38ce53b0a1b95ea647fb;p=openocd jtag/tcl: fix incorrect memcpy in jim_newtap_expected_id Found by clang static checker. On the very first call of jim_newtap_expected_id() pTap->expected_ids and expected_len are null, and there's nothing to copy. This patch changes this cryptic code to use realloc() instead. Change-Id: Ic0b5140d08257a906f15b55a2ae64db7bc06d5f1 Signed-off-by: Paul Fertser Reviewed-on: http://openocd.zylin.com/2562 Reviewed-by: Stian Skjelstad Tested-by: jenkins --- diff --git a/src/jtag/tcl.c b/src/jtag/tcl.c index 7f08b00f..c916fb1c 100644 --- a/src/jtag/tcl.c +++ b/src/jtag/tcl.c @@ -434,20 +434,15 @@ static int jim_newtap_expected_id(Jim_Nvp *n, Jim_GetOptInfo *goi, return e; } - unsigned expected_len = sizeof(uint32_t) * pTap->expected_ids_cnt; - uint32_t *new_expected_ids = malloc(expected_len + sizeof(uint32_t)); - if (new_expected_ids == NULL) { + uint32_t *p = realloc(pTap->expected_ids, + (pTap->expected_ids_cnt + 1) * sizeof(uint32_t)); + if (!p) { Jim_SetResultFormatted(goi->interp, "no memory"); return JIM_ERR; } - memcpy(new_expected_ids, pTap->expected_ids, expected_len); - - new_expected_ids[pTap->expected_ids_cnt] = w; - - free(pTap->expected_ids); - pTap->expected_ids = new_expected_ids; - pTap->expected_ids_cnt++; + pTap->expected_ids = p; + pTap->expected_ids[pTap->expected_ids_cnt++] = w; return JIM_OK; }