diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2018-11-02 14:57:03 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2018-11-02 14:57:03 +0900 |
| commit | 0419f07915603f74bbd3f6435ffee42cde5eaa5f (patch) | |
| tree | 410d37d5457c5276ad63ff500356ee1fe388b5fb /src/proc.c | |
| parent | f2084f300ba87ff6e42437a52aebb5e7a6c19355 (diff) | |
| download | mruby-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.c | 14 |
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* |
