* 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:
nobu 2017-08-21 14:15:31 +00:00
Родитель 29fa7a9f91
Коммит 9c927f8c8b
3 изменённых файлов: 3 добавлений и 1 удалений

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
Просмотреть файл

@ -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);
}
}