diff options
Diffstat (limited to 'tests/stack.test')
| -rw-r--r-- | tests/stack.test | 74 | 
1 files changed, 47 insertions, 27 deletions
| diff --git a/tests/stack.test b/tests/stack.test index 5beda5b..13bc524 100644 --- a/tests/stack.test +++ b/tests/stack.test @@ -4,39 +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.4 1999/06/26 20:55:13 rjohnson Exp $ - -if {[lsearch [namespace children] ::tcltest] == -1} { -    package require tcltest -    namespace import ::tcltest::* -} -# Note that a failure in this test results in a crash of the executable. - -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?)} +package require tcltest 2 +namespace import ::tcltest::* + +# Note that a failure in this test may result 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-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: | 
