diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/unixInit.test | 41 |
1 files changed, 36 insertions, 5 deletions
diff --git a/tests/unixInit.test b/tests/unixInit.test index d22c0d7..d6c9665 100644 --- a/tests/unixInit.test +++ b/tests/unixInit.test @@ -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: unixInit.test,v 1.18 2001/07/03 10:26:48 dkf Exp $ +# RCS: @(#) $Id: unixInit.test,v 1.19 2001/07/03 16:53:33 dgp Exp $ if {[lsearch [namespace children] ::tcltest] == -1} { package require tcltest @@ -202,21 +202,52 @@ test unixInit-2.7 {TclpInitLibraryPath: compiled-in library path} \ # [lindex $auto_path end] } {} test unixInit-2.8 {TclpInitLibraryPath: all absolute pathtype} {unixOnly} { + # Checking for Bug 219416 + # When a program that embeds the Tcl library, like tcltest, is + # installed near the "root" of the file system, there was a problem + # constructing directories relative to the executable. When a + # relative ".." went past the root, realtive path names were created + # rather than absolute pathnames. In some cases, accessing past the + # root caused memory access violations too. + # + # The bug is now fixed, but here we check for it by making sure that + # the directories constructed relative to the executable are all + # absolute pathnames, even when the executable is installed near + # the root of the filesystem. + # + # The only directory near the root we are likely to have write access + # to is /tmp. file delete -force /tmp/sparkly - file delete -force /tmp/library + file delete -force /tmp/lib/tcl[info tclversion] file mkdir /tmp/sparkly file copy $::tcltest::tcltest /tmp/sparkly/tcltest - file mkdir /tmp/library/ - close [open /tmp/library/init.tcl w] + # Keep any existing /tmp/lib directory + set deletelib 1 + if {[file exists /tmp/lib]} { + if {[file isdirectory /tmp/lib]} { + set deletelib 0 + } else { + file delete -force /tmp/lib + } + } + + # For a successful Tcl_Init, we need a [source]-able init.tcl in + # ../lib/tcl$version relative to the executable. + file mkdir /tmp/lib/tcl[info tclversion] + close [open /tmp/lib/tcl[info tclversion]/init.tcl w] + # Check that all directories in the library path are absolute pathnames set allAbsolute 1 foreach dir [getlibpath /tmp/sparkly/tcltest] { set allAbsolute [expr {$allAbsolute \ && [string equal absolute [file pathtype $dir]]}] } + + # Clean up temporary installation file delete -force /tmp/sparkly - file delete -force /tmp/library + file delete -force /tmp/lib/tcl[info tclversion] + if {$deletelib} {file delete -force /tmp/lib} set allAbsolute } 1 test unixInit-2.9 {TclpInitLibraryPath: paths relative to executable} { |