summaryrefslogtreecommitdiffhomepage
path: root/src/proc.c
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2018-11-02 14:57:03 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2018-11-02 14:57:03 +0900
commit0419f07915603f74bbd3f6435ffee42cde5eaa5f (patch)
tree410d37d5457c5276ad63ff500356ee1fe388b5fb /src/proc.c
parentf2084f300ba87ff6e42437a52aebb5e7a6c19355 (diff)
downloadmruby-0419f07915603f74bbd3f6435ffee42cde5eaa5f.tar.gz
mruby-0419f07915603f74bbd3f6435ffee42cde5eaa5f.zip
Add `NULL` checks for `mrb->ci` and `proc->upeer`; #4024
Diffstat (limited to 'src/proc.c')
-rw-r--r--src/proc.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/src/proc.c b/src/proc.c
index 05b897480..dcbeb4f62 100644
--- a/src/proc.c
+++ b/src/proc.c
@@ -63,12 +63,12 @@ closure_setup(mrb_state *mrb, struct RProc *p)
{
mrb_callinfo *ci = mrb->c->ci;
struct RProc *up = p->upper;
- struct REnv *e;
+ struct REnv *e = NULL;
- if (ci->env) {
+ if (ci && ci->env) {
e = ci->env;
}
- else {
+ else if (up) {
struct RClass *tc = MRB_PROC_TARGET_CLASS(p);
e = env_new(mrb, up->body.irep->nlocals);
@@ -78,9 +78,11 @@ closure_setup(mrb_state *mrb, struct RProc *p)
mrb_field_write_barrier(mrb, (struct RBasic*)e, (struct RBasic*)tc);
}
}
- p->e.env = e;
- p->flags |= MRB_PROC_ENVSET;
- mrb_field_write_barrier(mrb, (struct RBasic*)p, (struct RBasic*)e);
+ if (e) {
+ p->e.env = e;
+ p->flags |= MRB_PROC_ENVSET;
+ mrb_field_write_barrier(mrb, (struct RBasic*)p, (struct RBasic*)e);
+ }
}
struct RProc*