]> git.sur5r.net Git - openocd/commitdiff
jtag/tcl: fix incorrect memcpy in jim_newtap_expected_id
authorPaul Fertser <fercerpav@gmail.com>
Thu, 26 Feb 2015 17:18:38 +0000 (20:18 +0300)
committerPaul Fertser <fercerpav@gmail.com>
Tue, 14 Apr 2015 11:09:48 +0000 (12:09 +0100)
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
src/jtag/tcl.c

index 7f08b00fb12eeead51b403eb80341f19091c4854..c916fb1ca186126b99f3c2566eace86f59664081 100644 (file)
@@ -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;
 }