Actions
Bug #21343
openNamespace: singleton classes of root namespace leak between namespaces
Bug #21343: Namespace: singleton classes of root namespace leak between namespaces
Description
Ruby classes all have singleton classes, those singleton classes have singleton classes, and so on with infinite nesting. Since we don't have infinite resources, we create these lazily.
Because of this, only a certain number of singleton classes exist in the root namespace. At a certain depth, mutable singleton classes end up shared between namespaces.
File.write("/tmp/ntest.rb", <<~'RUBY') p String.singleton_class.singleton_class::Foo String.singleton_class.singleton_class::Bar = 456 RUBY String.singleton_class.singleton_class::Foo = 123 ns = Namespace.new ns.require("/tmp/ntest.rb") p String.singleton_class.singleton_class::Bar RUBY_NAMESPACE=1 ruby nstest2.rb ruby: warning: Namespace is experimental, and the behavior may change in the future! See doc/namespace.md for known issues, etc. 123 456
Updated by byroot (Jean Boussier) 6 months ago
Seems adjacent to https://bugs.ruby-lang.org/issues/21330.
The klass field like the flags one isn't part of the classext_t, so it's not effectively namespaced.
Updated by hsbt (Hiroshi SHIBATA) 6 months ago
- Tags set to namespace
Actions