зеркало из https://github.com/github/ruby.git
prevent stack overflow
* gc.c: enable PREVENT_STACK_OVERFLOW. * vm.c (invoke_iseq_block_from_c): prevent stack overflow. * vm_eval.c (stack_check): raise preallocated exception instance. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59630 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
29fa7a9f91
Коммит
9c927f8c8b
1
gc.c
1
gc.c
|
@ -4004,6 +4004,7 @@ ruby_stack_length(VALUE **p)
|
|||
return STACK_LENGTH;
|
||||
}
|
||||
|
||||
#define PREVENT_STACK_OVERFLOW 1
|
||||
#ifndef PREVENT_STACK_OVERFLOW
|
||||
#if !(defined(POSIX_SIGNAL) && defined(SIGSEGV) && defined(HAVE_SIGALTSTACK))
|
||||
# define PREVENT_STACK_OVERFLOW 1
|
||||
|
|
1
vm.c
1
vm.c
|
@ -1018,6 +1018,7 @@ invoke_iseq_block_from_c(rb_thread_t *th, const struct rb_captured_block *captur
|
|||
VALUE *sp = cfp->sp;
|
||||
const rb_callable_method_entry_t *me = th->passed_bmethod_me;
|
||||
th->passed_bmethod_me = NULL;
|
||||
stack_check(th);
|
||||
|
||||
CHECK_VM_STACK_OVERFLOW(cfp, argc);
|
||||
cfp->sp = sp + argc;
|
||||
|
|
|
@ -258,7 +258,7 @@ stack_check(rb_thread_t *th)
|
|||
if (!rb_thread_raised_p(th, RAISED_STACKOVERFLOW) &&
|
||||
rb_threadptr_stack_check(th)) {
|
||||
rb_thread_raised_set(th, RAISED_STACKOVERFLOW);
|
||||
rb_exc_raise(sysstack_error);
|
||||
rb_threadptr_stack_overflow(th);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче