Tcl Source Code

Artifact [eede82f606]
Login

Artifact eede82f6062d3217581e09d0237a7d758e3d6536:

Attachment "try.patch" to ticket [2688063fff] added by ferrieux 2009-03-16 15:45:01.
Index: tclCmdMZ.c
===================================================================
RCS file: /cvsroot/tcl/tcl/generic/tclCmdMZ.c,v
retrieving revision 1.181
diff -u -r1.181 tclCmdMZ.c
--- tclCmdMZ.c	9 Mar 2009 09:12:39 -0000	1.181
+++ tclCmdMZ.c	16 Mar 2009 08:41:43 -0000
@@ -4297,7 +4297,7 @@
 
 	Tcl_ListObjGetElements(NULL, handlersObj, &numHandlers, &handlers);
 	for (i=0 ; i<numHandlers ; i++) {
-	    Tcl_Obj *handlerObj;
+	    Tcl_Obj *handlerObj,*handlerBody;
 
 	    Tcl_ListObjGetElements(NULL, handlers[i], &dummy, &info);
 	    if (!found) {
@@ -4385,10 +4385,11 @@
 
 	    handlerObj = info[0];
 	    Tcl_IncrRefCount(handlerObj);
-	    Tcl_DecrRefCount(handlersObj);
+		handlerBody=info[4];
+	    Tcl_DecrRefCount(handlersObj); /* info[] may vanish beyond this point */
 	    Tcl_NRAddCallback(interp, TryPostHandler, cmdObj, options,
 		    handlerObj, finallyObj);
-	    return TclNREvalObjEx(interp, info[4], 0,
+	    return TclNREvalObjEx(interp, handlerBody, 0,
 		    ((Interp *) interp)->cmdFramePtr, -1);
 
 	handlerFailed: