Infinite recursion on circular 'using'
This code causes infinite recursion:
module X; using X; end
Note that any circular 'using' will cause infinite recursion, not just a module using itself:
module A; end module B; using A; end module A; using B; end
This raises a SystemStackError on my OS X Lion machine, but it causes a segmentation fault on Ubuntu 10.04 i686 (running 2.6.32-38). I've attached a dump of an IRB session which finishes with a segfault.
#3 Updated by shugo (Shugo Maeda) over 4 years ago
- % Done changed from 0 to 100
- Status changed from Assigned to Closed
This issue was solved with changeset r37646.
Charlie, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.
eval.c (rb_mod_using): raise an ArgumentError if cyclic using is
detected. based on the patch by Charlie Somerville.
test/ruby/test_refinement.rb: related test.
#4 [ruby-core:49288] Updated by shugo (Shugo Maeda) over 4 years ago
charliesome (Charlie Somerville) wrote:
I've attached a patch that does a simple DFS to make sure no circular using relationship is created.
Thank you. I've changed it to raise an ArgumentError instead of TypeError for the consistency with the cyclic include detection.