mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
Merge pull request #3991 from take-cheeze/fix_eval_env_gc
Fix possible heap use after free in `mrb_exec_irep` and stack expanding.
This commit is contained in:
@@ -156,6 +156,18 @@ envadjust(mrb_state *mrb, mrb_value *oldbase, mrb_value *newbase, size_t size)
|
||||
|
||||
e->stack = newbase + off;
|
||||
}
|
||||
|
||||
if (ci->proc && MRB_PROC_ENV_P(ci->proc) && ci->env != MRB_PROC_ENV(ci->proc)) {
|
||||
e = MRB_PROC_ENV(ci->proc);
|
||||
|
||||
if (e && MRB_ENV_STACK_SHARED_P(e) &&
|
||||
(st = e->stack) && oldbase <= st && st < oldbase+size) {
|
||||
ptrdiff_t off = e->stack - oldbase;
|
||||
|
||||
e->stack = newbase + off;
|
||||
}
|
||||
}
|
||||
|
||||
ci->stackent = newbase + (ci->stackent - oldbase);
|
||||
ci++;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user