diff options
author | dgp <dgp@users.sourceforge.net> | 2012-12-13 15:59:51 (GMT) |
---|---|---|
committer | dgp <dgp@users.sourceforge.net> | 2012-12-13 15:59:51 (GMT) |
commit | 7cf0ac1eafc58e6473a6f2d2e2c0480628ac626c (patch) | |
tree | 0b5177a6a5dab4217d95ada5e723b55c18a3d157 | |
parent | a7a35f9dd069a28ee71c5b3c05293633a77c0f12 (diff) | |
download | tcl-7cf0ac1eafc58e6473a6f2d2e2c0480628ac626c.zip tcl-7cf0ac1eafc58e6473a6f2d2e2c0480628ac626c.tar.gz tcl-7cf0ac1eafc58e6473a6f2d2e2c0480628ac626c.tar.bz2 |
3595576 Tests/fix for mem corruption: [catch] fails to store options in a var.
-rw-r--r-- | generic/tclCmdAH.c | 1 | ||||
-rw-r--r-- | tests/cmdAH.test | 6 |
2 files changed, 6 insertions, 1 deletions
diff --git a/generic/tclCmdAH.c b/generic/tclCmdAH.c index 8e32389..44f08a3 100644 --- a/generic/tclCmdAH.c +++ b/generic/tclCmdAH.c @@ -273,7 +273,6 @@ Tcl_CatchObjCmd( Tcl_Obj *options = Tcl_GetReturnOptions(interp, result); if (NULL == Tcl_ObjSetVar2(interp, optionVarNamePtr, NULL, options, 0)) { - Tcl_DecrRefCount(options); Tcl_ResetResult(interp); Tcl_AppendResult(interp, "couldn't save return options in variable", NULL); diff --git a/tests/cmdAH.test b/tests/cmdAH.test index 2e94d7d..fb0fefc 100644 --- a/tests/cmdAH.test +++ b/tests/cmdAH.test @@ -46,6 +46,12 @@ test cmdAH-1.2 {Tcl_CatchObjCmd, errors} { test cmdAH-1.3 {Tcl_CatchObjCmd, errors} { list [catch {catch foo bar baz spaz} msg] $msg } {1 {wrong # args: should be "catch script ?resultVarName? ?optionVarName?"}} +test cmdAH-1.4 {Bug 3595576} { + catch {catch {} -> noSuchNs::var} +} 1 +test cmdAH-1.5 {Bug 3595576} { + catch {catch error -> noSuchNs::var} +} 1 test cmdAH-2.1 {Tcl_CdObjCmd} { list [catch {cd foo bar} msg] $msg |