aboutsummaryrefslogtreecommitdiffstats
path: root/proc.c
diff options
context:
space:
mode:
authorKoichi Sasada <ko1@atdot.net>2023-02-10 16:02:20 +0900
committerKoichi Sasada <ko1@atdot.net>2023-02-10 17:55:25 +0900
commitbe94808282e50d3ecaa1392ffc38c9ec89e3438b (patch)
treef1e98d44d7743ce8785ac257282ba8082f831bd5 /proc.c
parent38ecf08ba16b7e8946ac414f4f8c7ee155b34083 (diff)
downloadruby-be94808282e50d3ecaa1392ffc38c9ec89e3438b.tar.gz
use correct svar even if env is escaped
This patch is follo-up of 0a82bfe. Without this patch, if env is escaped (Proc'ed), strange svar can be touched. This patch tracks escaped env and use it.
Diffstat (limited to 'proc.c')
-rw-r--r--proc.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/proc.c b/proc.c
index 3e2d8be6cf..3d26fa9623 100644
--- a/proc.c
+++ b/proc.c
@@ -712,7 +712,8 @@ rb_vm_ifunc_new(rb_block_call_func_t func, const void *data, int min_argc, int m
}
arity.argc.min = min_argc;
arity.argc.max = max_argc;
- VALUE ret = rb_imemo_new(imemo_ifunc, (VALUE)func, (VALUE)data, arity.packed, (VALUE)GET_EC()->cfp);
+ rb_execution_context_t *ec = GET_EC();
+ VALUE ret = rb_imemo_new(imemo_ifunc, (VALUE)func, (VALUE)data, arity.packed, (VALUE)rb_vm_svar_lep(ec, ec->cfp));
return (struct vm_ifunc *)ret;
}