Skip to content

Commit 5c114c9

Browse files
committed
Clear unused stack region that may refer freed objects; fix #3596
1 parent 491d68b commit 5c114c9

File tree

1 file changed

+7
-6
lines changed

1 file changed

+7
-6
lines changed

src/gc.c

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -544,6 +544,7 @@ mark_context_stack(mrb_state *mrb, struct mrb_context *c)
544544
{
545545
size_t i;
546546
size_t e;
547+
mrb_value nil;
547548

548549
if (c->stack == NULL) return;
549550
e = c->stack - c->stbase;
@@ -553,14 +554,14 @@ mark_context_stack(mrb_state *mrb, struct mrb_context *c)
553554
mrb_value v = c->stbase[i];
554555

555556
if (!mrb_immediate_p(v)) {
556-
if (mrb_basic_ptr(v)->tt == MRB_TT_FREE) {
557-
c->stbase[i] = mrb_nil_value();
558-
}
559-
else {
560-
mrb_gc_mark(mrb, mrb_basic_ptr(v));
561-
}
557+
mrb_gc_mark(mrb, mrb_basic_ptr(v));
562558
}
563559
}
560+
e = c->stend - c->stbase;
561+
nil = mrb_nil_value();
562+
for (; i<e; i++) {
563+
c->stbase[i] = nil;
564+
}
564565
}
565566

566567
static void

0 commit comments

Comments
 (0)