diff options
| -rw-r--r-- | generic/tclCmdMZ.c | 6 | ||||
| -rw-r--r-- | tests/cmdMZ.test | 18 |
2 files changed, 24 insertions, 0 deletions
diff --git a/generic/tclCmdMZ.c b/generic/tclCmdMZ.c index 2671d49..5eb854b 100644 --- a/generic/tclCmdMZ.c +++ b/generic/tclCmdMZ.c @@ -4812,18 +4812,24 @@ TryPostBody( Tcl_Obj *varName; Tcl_ListObjIndex(NULL, info[3], 0, &varName); + Tcl_IncrRefCount(varName); if (Tcl_ObjSetVar2(interp, varName, NULL, resultObj, TCL_LEAVE_ERR_MSG) == NULL) { + Tcl_DecrRefCount(varName); Tcl_DecrRefCount(resultObj); goto handlerFailed; } + Tcl_DecrRefCount(varName); Tcl_DecrRefCount(resultObj); if (dummy > 1) { Tcl_ListObjIndex(NULL, info[3], 1, &varName); + Tcl_IncrRefCount(varName); if (Tcl_ObjSetVar2(interp, varName, NULL, options, TCL_LEAVE_ERR_MSG) == NULL) { + Tcl_DecrRefCount(varName); goto handlerFailed; } + Tcl_DecrRefCount(varName); } } else { /* diff --git a/tests/cmdMZ.test b/tests/cmdMZ.test index d79e9f6..dd299f1 100644 --- a/tests/cmdMZ.test +++ b/tests/cmdMZ.test @@ -409,6 +409,24 @@ test cmdMZ-6.10 {Tcl_TimeRateObjCmd: huge overhead cause 0us result} { [expr {[lindex $m1 6] <= 0.001}] } {1 1 1 1} +test cmdMZ-try-1.0 { + + fix for issue 45b9faf103f2 + + [try] interaction with local variable names produces segmentation violation + +} -body { + ::apply {{} { + eval { + try { + lindex 5 + } on ok res {} + } + set res + }} +} -result 5 + + # The tests for Tcl_WhileObjCmd are in while.test # cleanup |
