Tcl Source Code

Artifact [e71a02e24a]
Login

Artifact e71a02e24af83eec308e514dce972fc5978f5536:

Attachment "1016167.patch" to ticket [1016167fff] added by dgp 2004-08-26 01:30:06.
Index: generic/tclTimer.c
===================================================================
RCS file: /cvsroot/tcl/tcl/generic/tclTimer.c,v
retrieving revision 1.8
diff -u -r1.8 tclTimer.c
--- generic/tclTimer.c	6 Apr 2004 22:25:55 -0000	1.8
+++ generic/tclTimer.c	25 Aug 2004 18:22:13 -0000
@@ -765,6 +765,12 @@
      */
 
     if (assocPtr == NULL) {
+	Tcl_Command token = Tcl_GetCommandFromObj(interp, objv[0]);
+	Tcl_Command originalToken = TclGetOriginalCommand(token);
+
+	if (originalToken != NULL) {
+	    token = originalToken;
+	}
 	assocPtr = (AfterAssocData *) ckalloc(sizeof(AfterAssocData));
 	assocPtr->interp = interp;
 	assocPtr->firstAfterPtr = NULL;
@@ -776,8 +782,8 @@
 	cmdInfo.objClientData = (ClientData) assocPtr;
 	cmdInfo.deleteProc = NULL;
 	cmdInfo.deleteData = (ClientData) assocPtr;
-	Tcl_SetCommandInfo(interp, Tcl_GetStringFromObj(objv[0], &length),
-		&cmdInfo);
+
+	Tcl_SetCommandInfoFromToken(token, &cmdInfo);
     }
 
     /*
Index: tests/timer.test
===================================================================
RCS file: /cvsroot/tcl/tcl/tests/timer.test,v
retrieving revision 1.8
diff -u -r1.8 timer.test
--- tests/timer.test	19 May 2004 13:03:37 -0000	1.8
+++ tests/timer.test	25 Aug 2004 18:22:14 -0000
@@ -538,6 +538,18 @@
     set x
 } {before after2 after4}
 
+test timer-10.1 {Bug 1016167: [after] overwrites imports} -setup {
+    interp create slave
+    slave eval namespace export after
+    slave eval namespace eval foo namespace import ::after
+} -body {
+    slave eval foo::after 1
+    slave eval namespace origin foo::after
+} -cleanup {
+    # Bug will cause crash here; would cause failure otherwise
+    interp delete slave
+} -result ::after
+
 # cleanup
 ::tcltest::cleanupTests
 return