diff options
Diffstat (limited to 'tests/stack.test')
-rw-r--r-- | tests/stack.test | 60 |
1 files changed, 46 insertions, 14 deletions
diff --git a/tests/stack.test b/tests/stack.test index 19a5104..13bc524 100644 --- a/tests/stack.test +++ b/tests/stack.test @@ -4,27 +4,59 @@ # built-in commands. Sourcing this file into Tcl runs the tests and # generates output for errors. No output means no errors were found. # -# Copyright (c) 1998-1999 by Scriptics Corporation. +# Copyright (c) 1998-2000 Ajuba Solutions. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. -# -# RCS: @(#) $Id: stack.test,v 1.8 2000/04/10 17:19:04 ericm Exp $ -if {[lsearch [namespace children] ::tcltest] == -1} { - package require tcltest - namespace import -force ::tcltest::* -} +package require tcltest 2 +namespace import ::tcltest::* + +# Note that a failure in this test may result in a crash of the executable. -# Note that a failure in this test results in a crash of the executable. +test stack-1.1 {maxNestingDepth reached on infinite recursion} -body { + # do this in a sub process in case it segfaults + exec [interpreter] << { + proc recurse {} { recurse } + catch { recurse } rv + puts $rv + } +} -result {too many nested evaluations (infinite loop?)} -test stack-1.1 {maxNestingDepth reached on infinite recursion} { - proc recurse {} { return [recurse] } - catch {recurse} rv - rename recurse {} - set rv -} {too many nested calls to Tcl_EvalObj (infinite loop?)} +test stack-2.1 {maxNestingDepth reached on infinite recursion} -body { + # do this in a sub process in case it segfaults + exec [interpreter] << { + interp alias {} unknown {} notaknownproc + catch { unknown } msg + puts $msg + } +} -result {too many nested evaluations (infinite loop?)} + +# Make sure that there is enough stack to run regexp even if we're +# close to the recursion limit. [Bug 947070] [Patch 746378] +test stack-3.1 {enough room for regexp near recursion limit} -body { + # do this in a sub process in case it segfaults + exec [interpreter] << { + interp recursionlimit {} 10000 + set depth 0 + proc a { max } { + if { [info level] < $max } { + set ::depth [info level] + a $max + } else { + regexp {^ ?} x + } + } + catch { a 10001 } + set depth2 $depth + puts [list [a $depth] [expr { $depth2 - $depth }]] + } +} -result {1 1} # cleanup ::tcltest::cleanupTests return + +# Local Variables: +# mode: tcl +# End: |