summaryrefslogtreecommitdiffstats
path: root/tests/012/stack.tl
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2021-06-24 07:32:46 -0700
committerKaz Kylheku <kaz@kylheku.com>2021-06-24 07:32:46 -0700
commitc45cb488586b0f8c54120d9eacb6491df017609b (patch)
treebba2d774270a1cc0e3b2c636f0826363b53fcff4 /tests/012/stack.tl
parent2034729c70161b16d99eee0503c4354df39cd49d (diff)
downloadtxr-c45cb488586b0f8c54120d9eacb6491df017609b.tar.gz
txr-c45cb488586b0f8c54120d9eacb6491df017609b.tar.bz2
txr-c45cb488586b0f8c54120d9eacb6491df017609b.zip
Test for stack overflow protection.
* tests/012/stack.tl: New file. * tets/common.tl (mvtest): New macro.
Diffstat (limited to 'tests/012/stack.tl')
-rw-r--r--tests/012/stack.tl31
1 files changed, 31 insertions, 0 deletions
diff --git a/tests/012/stack.tl b/tests/012/stack.tl
new file mode 100644
index 00000000..a8d06487
--- /dev/null
+++ b/tests/012/stack.tl
@@ -0,0 +1,31 @@
+(load "../common")
+
+(defun recur () (recur))
+
+(defmacro so (expr)
+ ^(catch ,expr
+ (stack-overflow (exc) :so)))
+
+(test (so (recur)) :so)
+
+(test (let ((pid (fork)))
+ (cond
+ ((zerop pid) (set-stack-limit 0) (recur))
+ (t (let ((status (wait pid)))
+ (w-ifsignaled status)))))
+ t)
+
+(defmacro infexp ()
+ ^(foo (infexp)))
+
+(test (so (expand '(infexp))) :so)
+
+(defvarl orig (get-stack-limit))
+
+(mvtest
+ (set-stack-limit nil) orig
+ (set-stack-limit orig) nil
+ (set-stack-limit 0) orig
+ (set-stack-limit orig) nil
+ (set-stack-limit 65536) orig
+ (set-stack-limit orig) 65536)