aboutsummaryrefslogtreecommitdiffstats
path: root/gc.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-12-22 13:15:58 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-12-22 13:15:58 +0000
commit96ac47c25109abfd846eb45ae6cb6b56c8b178e3 (patch)
tree23a6763c57b782d374aa8a02deba2a4a7aabd7f6 /gc.c
parent3f90a4ae1e5a6c3dcf83ece419019a1797caed04 (diff)
downloadruby-96ac47c25109abfd846eb45ae6cb6b56c8b178e3.tar.gz
gc.c: do not expose internal singleton class
* gc.c (internal_object_p): should not expose singleton classes without a metaclass. based on patches by ko1 and shugo. [Bug #11740] * class.c (rb_singleton_class_object_p): added. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53243 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'gc.c')
-rw-r--r--gc.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/gc.c b/gc.c
index 12be1eac11..24e746e798 100644
--- a/gc.c
+++ b/gc.c
@@ -2400,6 +2400,12 @@ internal_object_p(VALUE obj)
case T_NODE:
case T_ZOMBIE:
break;
+ case T_CLASS:
+ if (!p->as.basic.klass) break;
+ if (FL_TEST(obj, FL_SINGLETON)) {
+ return rb_singleton_class_internal_p(obj);
+ }
+ return 0;
default:
if (!p->as.basic.klass) break;
return 0;