зеркало из 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);
|
int escape = !(flags & FNM_NOESCAPE);
|
||||||
size_t pathlen = baselen + namelen;
|
size_t pathlen = baselen + namelen;
|
||||||
|
|
||||||
|
rb_check_stack_overflow();
|
||||||
|
|
||||||
for (cur = beg; cur < end; ++cur) {
|
for (cur = beg; cur < end; ++cur) {
|
||||||
struct glob_pattern *p = *cur;
|
struct glob_pattern *p = *cur;
|
||||||
if (p->type == RECURSIVE) {
|
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,
|
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,
|
rb_block_call_func_t bl_proc, int min_argc, int max_argc,
|
||||||
VALUE data2);
|
VALUE data2);
|
||||||
|
void rb_check_stack_overflow(void);
|
||||||
|
|
||||||
/* vm_insnhelper.c */
|
/* vm_insnhelper.c */
|
||||||
VALUE rb_equal_opt(VALUE obj1, VALUE obj2);
|
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
|
#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 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);
|
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);
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче