diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-05-25 19:55:53 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-05-25 19:58:06 +0900 |
| commit | de48d95c6d0336f4b91bd18adf0a5c4a4ec0a538 (patch) | |
| tree | b38d2182091681a760de1710c3e321fd759dd331 /src | |
| parent | c53747dbdf45759949a9629b7df269f4254d705e (diff) | |
| download | mruby-de48d95c6d0336f4b91bd18adf0a5c4a4ec0a538.tar.gz mruby-de48d95c6d0336f4b91bd18adf0a5c4a4ec0a538.zip | |
Avoid marking possibly freed stack; #3550 #3612
Diffstat (limited to 'src')
| -rw-r--r-- | src/gc.c | 7 |
1 files changed, 5 insertions, 2 deletions
@@ -648,8 +648,11 @@ gc_mark_children(mrb_state *mrb, mrb_gc *gc, struct RBasic *obj) struct REnv *e = (struct REnv*)obj; mrb_int i, len; - if (MRB_ENV_STACK_SHARED_P(e) && e->cxt.c->fib) { - mrb_gc_mark(mrb, (struct RBasic*)e->cxt.c->fib); + if (MRB_ENV_STACK_SHARED_P(e)) { + if (e->cxt.c->fib) { + mrb_gc_mark(mrb, (struct RBasic*)e->cxt.c->fib); + } + break; } len = MRB_ENV_STACK_LEN(e); for (i=0; i<len; i++) { |
