зеркало из https://github.com/github/ruby.git
Check stack overflow in recursive glob_helper [Bug #17162]
This commit is contained in:
Родитель
a5b4b806de
Коммит
083c5f08ec
2
dir.c
2
dir.c
|
@ -2274,6 +2274,8 @@ glob_helper(
|
|||
int escape = !(flags & FNM_NOESCAPE);
|
||||
size_t pathlen = baselen + namelen;
|
||||
|
||||
rb_check_stack_overflow();
|
||||
|
||||
for (cur = beg; cur < end; ++cur) {
|
||||
struct glob_pattern *p = *cur;
|
||||
if (p->type == RECURSIVE) {
|
||||
|
|
|
@ -80,6 +80,7 @@ VALUE rb_yield_force_blockarg(VALUE values);
|
|||
VALUE rb_lambda_call(VALUE obj, ID mid, int argc, const VALUE *argv,
|
||||
rb_block_call_func_t bl_proc, int min_argc, int max_argc,
|
||||
VALUE data2);
|
||||
void rb_check_stack_overflow(void);
|
||||
|
||||
/* vm_insnhelper.c */
|
||||
VALUE rb_equal_opt(VALUE obj1, VALUE obj2);
|
||||
|
|
10
vm_eval.c
10
vm_eval.c
|
@ -302,6 +302,16 @@ stack_check(rb_execution_context_t *ec)
|
|||
|
||||
#ifndef MJIT_HEADER
|
||||
|
||||
void
|
||||
rb_check_stack_overflow(void)
|
||||
{
|
||||
#ifndef RB_THREAD_LOCAL_SPECIFIER
|
||||
if (!ruby_current_ec_key) return;
|
||||
#endif
|
||||
rb_execution_context_t *ec = GET_EC();
|
||||
if (ec) stack_check(ec);
|
||||
}
|
||||
|
||||
static inline const rb_callable_method_entry_t *rb_search_method_entry(VALUE recv, ID mid);
|
||||
static inline enum method_missing_reason rb_method_call_status(rb_execution_context_t *ec, const rb_callable_method_entry_t *me, call_type scope, VALUE self);
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче