cpython-0001: pydoc.allmethods unconditional __bases__ recursion, no visited guard cpython-0002: turtle.__methodDict unconditional __bases__ recursion, fires at import cpython-0003: idlelib.rpc._getmethods unconditional __bases__ recursion, IDLE debug path django-0006: migrations.state.flatten_bases abstract model diamond traversal (comment in source acknowledges duplicates) flask/rails/ruby/phoenix: CLEAN
955 B
955 B
Rails — CWE-407 Diamond Traversal Scan: CLEAN
Scanned: 2026-03-30
Files examined
activesupport/lib/active_support/concern.rb—append_features/prepend_featuresusebase < selfguard before processing dependencies; prevents re-inclusionrailties/lib/rails/initializable.rb—ancestors.reverse_eachiterates Ruby's linearized MRO (C3, no duplicates); not recursiveactivemodel/lib/active_model/translation.rb—lookup_ancestorscallsancestors.select {...}which is a flat MRO traversalactiverecord/lib/arel/visitors/visitor.rb—object.class.ancestors.find {...}is a flat MRO traversal
Result
No diamond recursion defects found. Rails uses Ruby's built-in ancestors (which returns the
C3-linearized MRO with no duplicates) rather than manually recursing through __bases__
equivalents. ActiveSupport::Concern is properly guarded against diamond re-inclusion via
the base < self subclass check.