summaryrefslogtreecommitdiffhomepage
path: root/src/gc.c
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2016-12-06 11:40:49 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2016-12-06 11:40:49 +0900
commitdffb4d82dc83054eade20679f069979d242d9745 (patch)
treefb8add0ee078d7b7463fa39a8d998835e0c8f71a /src/gc.c
parent3623a833a4304fc15ec78dbae17f25af906b44f2 (diff)
downloadmruby-dffb4d82dc83054eade20679f069979d242d9745.tar.gz
mruby-dffb4d82dc83054eade20679f069979d242d9745.zip
Add type check for cls before allocation
Diffstat (limited to 'src/gc.c')
-rw-r--r--src/gc.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/gc.c b/src/gc.c
index 69708e40b..470fffc5f 100644
--- a/src/gc.c
+++ b/src/gc.c
@@ -480,7 +480,18 @@ mrb_obj_alloc(mrb_state *mrb, enum mrb_vtype ttype, struct RClass *cls)
mrb_gc *gc = &mrb->gc;
if (cls) {
- enum mrb_vtype tt = MRB_INSTANCE_TT(cls);
+ enum mrb_vtype tt;
+
+ switch (cls->tt) {
+ case MRB_TT_CLASS:
+ case MRB_TT_SCLASS:
+ case MRB_TT_MODULE:
+ case MRB_TT_ENV:
+ break;
+ default:
+ mrb_raise(mrb, E_TYPE_ERROR, "allocation failure");
+ }
+ tt = MRB_INSTANCE_TT(cls);
if (tt != MRB_TT_FALSE &&
ttype != MRB_TT_SCLASS &&
ttype != MRB_TT_ICLASS &&