Bug #7308
closedInfinite recursion on circular 'using'
Description
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.
Files
Updated by mame (Yusuke Endoh) about 12 years ago
- Status changed from Open to Assigned
- Assignee set to shugo (Shugo Maeda)
- Target version set to 2.0.0
Updated by Anonymous about 12 years ago
I've attached a patch that does a simple DFS to make sure no circular using relationship is created.
Updated by shugo (Shugo Maeda) about 12 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.
[ruby-core:49092] Bug #7308 -
test/ruby/test_refinement.rb: related test.
Updated by shugo (Shugo Maeda) about 12 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.