diff options
author | dkf <dkf@noemail.net> | 2009-12-29 14:55:41 (GMT) |
---|---|---|
committer | dkf <dkf@noemail.net> | 2009-12-29 14:55:41 (GMT) |
commit | 12141195eb35bfe2f3e0460594c2183a06ce6e90 (patch) | |
tree | 3a75da09f1e7e848542384d80a279925e2ee7d74 /generic/tclInterp.c | |
parent | ea67a772cbf62abd725b8584fd2f7a1df280dad1 (diff) | |
download | tcl-12141195eb35bfe2f3e0460594c2183a06ce6e90.zip tcl-12141195eb35bfe2f3e0460594c2183a06ce6e90.tar.gz tcl-12141195eb35bfe2f3e0460594c2183a06ce6e90.tar.bz2 |
[Bug 2895741]: Make min() and max() supported in safe interpreters.
FossilOrigin-Name: 40561c3f87d4ea1e3907be50156e996bd6c77e23
Diffstat (limited to 'generic/tclInterp.c')
-rw-r--r-- | generic/tclInterp.c | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/generic/tclInterp.c b/generic/tclInterp.c index b724abf..a9adec1 100644 --- a/generic/tclInterp.c +++ b/generic/tclInterp.c @@ -10,7 +10,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclInterp.c,v 1.109 2009/12/28 09:58:14 dkf Exp $ + * RCS: @(#) $Id: tclInterp.c,v 1.110 2009/12/29 14:55:42 dkf Exp $ */ #include "tclInt.h" @@ -2960,9 +2960,26 @@ Tcl_MakeSafe( { Tcl_Channel chan; /* Channel to remove from safe interpreter. */ Interp *iPtr = (Interp *) interp; + Tcl_Interp *master = ((InterpInfo*) iPtr->interpInfo)->slave.masterInterp; TclHideUnsafeCommands(interp); + if (master != NULL) { + /* + * Alias these function implementations in the slave to those in the + * master; the overall implementations are safe, but they're normally + * defined by init.tcl which is not sourced by safe interpreters. + * Assume these functions all work. [Bug 2895741] + */ + + (void) Tcl_Eval(interp, + "namespace eval ::tcl {namespace eval mathfunc {}}"); + (void) Tcl_CreateAlias(interp, "::tcl::mathfunc::min", master, + "::tcl::mathfunc::min", 0, NULL); + (void) Tcl_CreateAlias(interp, "::tcl::mathfunc::max", master, + "::tcl::mathfunc::max", 0, NULL); + } + iPtr->flags |= SAFE_INTERP; /* |