summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorBouke van der Bijl <[email protected]>2016-12-06 10:30:08 -0500
committerBouke van der Bijl <[email protected]>2016-12-07 15:14:12 -0500
commitf7a891fa8979bdb82410e1adc98765013cc29a79 (patch)
treed534caa7fb953a5db067c99a0b290415889b4c38 /src
parent5930a6ebc7a5ebf0c9b2dfe1d250935e6ddaeceb (diff)
downloadmruby-f7a891fa8979bdb82410e1adc98765013cc29a79.tar.gz
mruby-f7a891fa8979bdb82410e1adc98765013cc29a79.zip
Mark all the built-in classes during GC sweep
Reported by https://hackerone.com/haquaman
Diffstat (limited to 'src')
-rw-r--r--src/gc.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/gc.c b/src/gc.c
index 470fffc5f..3e52b3433 100644
--- a/src/gc.c
+++ b/src/gc.c
@@ -832,6 +832,26 @@ root_scan_phase(mrb_state *mrb, mrb_gc *gc)
}
/* mark class hierarchy */
mrb_gc_mark(mrb, (struct RBasic*)mrb->object_class);
+
+ /* mark built-in classes */
+ mrb_gc_mark(mrb, (struct RBasic*)mrb->class_class);
+ mrb_gc_mark(mrb, (struct RBasic*)mrb->module_class);
+ mrb_gc_mark(mrb, (struct RBasic*)mrb->proc_class);
+ mrb_gc_mark(mrb, (struct RBasic*)mrb->string_class);
+ mrb_gc_mark(mrb, (struct RBasic*)mrb->array_class);
+ mrb_gc_mark(mrb, (struct RBasic*)mrb->hash_class);
+
+ mrb_gc_mark(mrb, (struct RBasic*)mrb->float_class);
+ mrb_gc_mark(mrb, (struct RBasic*)mrb->fixnum_class);
+ mrb_gc_mark(mrb, (struct RBasic*)mrb->true_class);
+ mrb_gc_mark(mrb, (struct RBasic*)mrb->false_class);
+ mrb_gc_mark(mrb, (struct RBasic*)mrb->nil_class);
+ mrb_gc_mark(mrb, (struct RBasic*)mrb->symbol_class);
+ mrb_gc_mark(mrb, (struct RBasic*)mrb->kernel_module);
+
+ mrb_gc_mark(mrb, (struct RBasic*)mrb->eException_class);
+ mrb_gc_mark(mrb, (struct RBasic*)mrb->eStandardError_class);
+
/* mark top_self */
mrb_gc_mark(mrb, (struct RBasic*)mrb->top_self);
/* mark exception */