summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2017-05-25 19:55:53 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2017-05-25 19:58:06 +0900
commitde48d95c6d0336f4b91bd18adf0a5c4a4ec0a538 (patch)
treeb38d2182091681a760de1710c3e321fd759dd331
parentc53747dbdf45759949a9629b7df269f4254d705e (diff)
downloadmruby-de48d95c6d0336f4b91bd18adf0a5c4a4ec0a538.tar.gz
mruby-de48d95c6d0336f4b91bd18adf0a5c4a4ec0a538.zip
Avoid marking possibly freed stack; #3550 #3612
-rw-r--r--src/gc.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/gc.c b/src/gc.c
index 7337c659a..a3eee65e7 100644
--- a/src/gc.c
+++ b/src/gc.c
@@ -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++) {