diff options
author | Paul Fertser <fercerpav@gmail.com> | 2015-02-26 20:18:38 +0300 |
---|---|---|
committer | Paul Fertser <fercerpav@gmail.com> | 2015-04-14 12:09:48 +0100 |
commit | 20fcd0729e7187e8fe6a38ce53b0a1b95ea647fb (patch) | |
tree | 0b1a0be06991b645c4c6a088b717aa175dc4332d /src/jtag | |
parent | 2175bb149a01e83e7e0b87ebe82531350c951a61 (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
Diffstat (limited to 'src/jtag')
-rw-r--r-- | src/jtag/tcl.c | 15 |
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; } |