diff options
author | Ludovic Courtès <ludo@gnu.org> | 2010-05-26 23:00:58 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2010-05-26 23:41:23 +0200 |
commit | f1046e6b78f3044db6d9fd64cf272864366a1182 (patch) | |
tree | 8b12f0cdcc257a75372ed88e8b63708048ea1d4d /libguile/vm-engine.c | |
parent | 01fded8c776feba9cb721996414dd98cd687e917 (diff) | |
download | guile-f1046e6b78f3044db6d9fd64cf272864366a1182.tar.gz |
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.
Diffstat (limited to 'libguile/vm-engine.c')
-rw-r--r-- | libguile/vm-engine.c | 4 |
1 files changed, 4 insertions, 0 deletions
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: |