From f1046e6b78f3044db6d9fd64cf272864366a1182 Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Wed, 26 May 2010 23:00:58 +0200 Subject: Raise an exception upon VM stack overflows (fixes bug #29574). * libguile/vm-engine.c (VM_NAME)[vm_error_stack_overflow]: Increase `vp->stack_limit' when possible. * libguile/vm.c (VM_STACK_RESERVE_SIZE): New macro. * test-suite/lib.scm (exception:vm-error): New variable. * test-suite/tests/eval.test ("stack overflow"): New test prefix. --- libguile/vm-engine.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'libguile/vm-engine.c') diff --git a/libguile/vm-engine.c b/libguile/vm-engine.c index 1976f7107..11981ba30 100644 --- a/libguile/vm-engine.c +++ b/libguile/vm-engine.c @@ -188,6 +188,10 @@ VM_NAME (SCM vm, SCM program, SCM *argv, int nargs) vm_error_stack_overflow: err_msg = scm_from_locale_string ("VM: Stack overflow"); finish_args = SCM_EOL; + if (stack_limit < vp->stack_base + vp->stack_size) + /* There are VM_STACK_RESERVE_SIZE bytes left. Make them available so + that `throw' below can run on this VM. */ + vp->stack_limit = vp->stack_base + vp->stack_size; goto vm_error; vm_error_stack_underflow: -- cgit v1.2.3