summaryrefslogtreecommitdiffstats
path: root/generic/tclLink.c
diff options
context:
space:
mode:
authordgp <dgp@noemail.net>2011-06-21 14:10:30 (GMT)
committerdgp <dgp@noemail.net>2011-06-21 14:10:30 (GMT)
commit515e032d1db53fcc5d12ae52b9860d819fc82d41 (patch)
treeddeb1ed2f06be006375b0c9ceffd930f1f5c8b45 /generic/tclLink.c
parent8fe54a014d0633aa64e25e9b8affad216b9fc53d (diff)
parent1adb2560610112a9a3fe09d7506cdaaf676672d8 (diff)
downloadtcl-515e032d1db53fcc5d12ae52b9860d819fc82d41.zip
tcl-515e032d1db53fcc5d12ae52b9860d819fc82d41.tar.gz
tcl-515e032d1db53fcc5d12ae52b9860d819fc82d41.tar.bz2
3317466 Prevent multiple Tcl_LinkVar() links to a single Tcl variable.
FossilOrigin-Name: fb1352c7ed335bb045472120f9104be68a9b41b2
Diffstat (limited to 'generic/tclLink.c')
-rw-r--r--generic/tclLink.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/generic/tclLink.c b/generic/tclLink.c
index 00010f3..a3b42bd 100644
--- a/generic/tclLink.c
+++ b/generic/tclLink.c
@@ -112,6 +112,14 @@ Tcl_LinkVar(
Link *linkPtr;
int code;
+ linkPtr = (Link *) Tcl_VarTraceInfo(interp, varName, TCL_GLOBAL_ONLY,
+ LinkTraceProc, (ClientData) NULL);
+ if (linkPtr != NULL) {
+ Tcl_SetObjResult(interp, Tcl_ObjPrintf(
+ "variable '%s' is already linked", varName));
+ return TCL_ERROR;
+ }
+
linkPtr = ckalloc(sizeof(Link));
linkPtr->interp = interp;
linkPtr->varName = Tcl_NewStringObj(varName, -1);