jtag/tcl: fix a double free of jim object
The Jim_SetResultFormatted() frees jim object earlier and the Jim_FreeNewObj() does it second time. It breaks the memory heap. To avoid it the Jim_IncrRefCount() + Jim_DecrRefCount() should be used instead of the Jim_FreeNewObj() call. Change-Id: Ifa5f38009b2d617624b5f27e916720888a3dbad9 Signed-off-by: Mikhail Rasputin <mikhail.godlike.rasputin@yandex.ru> Reviewed-on: http://openocd.zylin.com/5724 Tested-by: jenkins Reviewed-by: Antonio Borneo <borneo.antonio@gmail.com>
This commit is contained in:
parent
ef14384b68
commit
70f69f8728
|
@ -689,8 +689,9 @@ static int jim_jtag_arp_init(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
|
||||||
int e = jtag_init_inner(context);
|
int e = jtag_init_inner(context);
|
||||||
if (e != ERROR_OK) {
|
if (e != ERROR_OK) {
|
||||||
Jim_Obj *eObj = Jim_NewIntObj(goi.interp, e);
|
Jim_Obj *eObj = Jim_NewIntObj(goi.interp, e);
|
||||||
|
Jim_IncrRefCount(eObj);
|
||||||
Jim_SetResultFormatted(goi.interp, "error: %#s", eObj);
|
Jim_SetResultFormatted(goi.interp, "error: %#s", eObj);
|
||||||
Jim_FreeNewObj(goi.interp, eObj);
|
Jim_DecrRefCount(goi.interp, eObj);
|
||||||
return JIM_ERR;
|
return JIM_ERR;
|
||||||
}
|
}
|
||||||
return JIM_OK;
|
return JIM_OK;
|
||||||
|
@ -713,8 +714,9 @@ static int jim_jtag_arp_init_reset(Jim_Interp *interp, int argc, Jim_Obj *const
|
||||||
|
|
||||||
if (e != ERROR_OK) {
|
if (e != ERROR_OK) {
|
||||||
Jim_Obj *eObj = Jim_NewIntObj(goi.interp, e);
|
Jim_Obj *eObj = Jim_NewIntObj(goi.interp, e);
|
||||||
|
Jim_IncrRefCount(eObj);
|
||||||
Jim_SetResultFormatted(goi.interp, "error: %#s", eObj);
|
Jim_SetResultFormatted(goi.interp, "error: %#s", eObj);
|
||||||
Jim_FreeNewObj(goi.interp, eObj);
|
Jim_DecrRefCount(goi.interp, eObj);
|
||||||
return JIM_ERR;
|
return JIM_ERR;
|
||||||
}
|
}
|
||||||
return JIM_OK;
|
return JIM_OK;
|
||||||
|
|
Loading…
Reference in New Issue