summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordgp <dgp@users.sourceforge.net>2012-12-13 15:59:51 (GMT)
committerdgp <dgp@users.sourceforge.net>2012-12-13 15:59:51 (GMT)
commit7cf0ac1eafc58e6473a6f2d2e2c0480628ac626c (patch)
tree0b5177a6a5dab4217d95ada5e723b55c18a3d157
parenta7a35f9dd069a28ee71c5b3c05293633a77c0f12 (diff)
downloadtcl-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.c1
-rw-r--r--tests/cmdAH.test6
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