summaryrefslogtreecommitdiffstats
path: root/library/safe.tcl
diff options
context:
space:
mode:
authordkf <donal.k.fellows@manchester.ac.uk>2009-12-30 22:26:43 (GMT)
committerdkf <donal.k.fellows@manchester.ac.uk>2009-12-30 22:26:43 (GMT)
commit26e2008515075fa191d71fa2c8d21bd8032aaf75 (patch)
tree855cb8a0b5062bf4f178a9eba1c51d73da9e0609 /library/safe.tcl
parent7c7c6aa17bf0f27a8d5890a53d75e74830212d02 (diff)
downloadtcl-26e2008515075fa191d71fa2c8d21bd8032aaf75.zip
tcl-26e2008515075fa191d71fa2c8d21bd8032aaf75.tar.gz
tcl-26e2008515075fa191d71fa2c8d21bd8032aaf75.tar.bz2
[Bug 2923613]: Make the safer [source] handle a [return] at the end of the
file correctly.
Diffstat (limited to 'library/safe.tcl')
-rw-r--r--library/safe.tcl14
1 files changed, 8 insertions, 6 deletions
diff --git a/library/safe.tcl b/library/safe.tcl
index eaae00d..7c81f92 100644
--- a/library/safe.tcl
+++ b/library/safe.tcl
@@ -12,7 +12,7 @@
# See the file "license.terms" for information on usage and redistribution of
# this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# RCS: @(#) $Id: safe.tcl,v 1.36 2009/12/23 11:17:33 dkf Exp $
+# RCS: @(#) $Id: safe.tcl,v 1.37 2009/12/30 22:26:43 dkf Exp $
#
# The implementation is based on namespaces. These naming conventions are
@@ -842,7 +842,7 @@ proc ::safe::AliasSource {slave args} {
# because we want to control [info script] in the slave so information
# doesn't leak so much. [Bug 2913625]
set old [::interp eval $slave {info script}]
- if {[catch {
+ set code [catch {
set f [open $realfile]
fconfigure $f -eofchar \032
if {$encoding ne ""} {
@@ -852,13 +852,15 @@ proc ::safe::AliasSource {slave args} {
close $f
::interp eval $slave [list info script $file]
::interp eval $slave $contents
- } msg]} {
- catch {interp eval $slave [list info script $old]}
+ } msg opt]
+ catch {interp eval $slave [list info script $old]}
+ # Note that all non-errors are fine result codes from [source], so we must
+ # take a little care to do it properly. [Bug 2923613]
+ if {$code == 1} {
Log $slave $msg
return -code error "script error"
}
- catch {interp eval $slave [list info script $old]}
- return $msg
+ return -code $code -options $opt $msg
}
# AliasLoad is the target of the "load" alias in safe interpreters.