Bug #7308

Infinite recursion on circular 'using'

Added by Charlie Somerville over 1 year ago. Updated over 1 year ago.

[ruby-core:49092]
Status:Closed
Priority:Normal
Assignee:Shugo Maeda
Category:-
Target version:2.0.0
ruby -v:2.0.0-preview1 Backport:

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.

irb-session.txt Magnifier (42.2 KB) Charlie Somerville, 11/08/2012 07:15 PM

prevent-circular-using.patch Magnifier (1.7 KB) Charlie Somerville, 11/09/2012 07:37 PM

Associated revisions

Revision 37646
Added by Shugo Maeda over 1 year ago

  • eval.c (rbmodusing): raise an ArgumentError if cyclic using is
    detected. based on the patch by Charlie Somerville.
    Bug #7308

  • test/ruby/test_refinement.rb: related test.

History

#1 Updated by Yusuke Endoh over 1 year ago

  • Status changed from Open to Assigned
  • Assignee set to Shugo Maeda
  • Target version set to 2.0.0

#2 Updated by Charlie Somerville over 1 year ago

I've attached a patch that does a simple DFS to make sure no circular using relationship is created.

#3 Updated by Shugo Maeda over 1 year 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 (rbmodusing): raise an ArgumentError if cyclic using is
    detected. based on the patch by Charlie Somerville.
    Bug #7308

  • test/ruby/test_refinement.rb: related test.

#4 Updated by Shugo Maeda over 1 year 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.

Also available in: Atom PDF