aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Fertser <fercerpav@gmail.com>2015-02-26 20:18:38 +0300
committerPaul Fertser <fercerpav@gmail.com>2015-04-14 12:09:48 +0100
commit20fcd0729e7187e8fe6a38ce53b0a1b95ea647fb (patch)
tree0b1a0be06991b645c4c6a088b717aa175dc4332d
parent2175bb149a01e83e7e0b87ebe82531350c951a61 (diff)
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 <fercerpav@gmail.com> Reviewed-on: http://openocd.zylin.com/2562 Reviewed-by: Stian Skjelstad <stian@nixia.no> Tested-by: jenkins
-rw-r--r--src/jtag/tcl.c15
1 files changed, 5 insertions, 10 deletions
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;
}