[ruby-core:123468] [Ruby Bug#21446] StackOverflow when changing visibility in reopened refinement
From:
"jeremyevans0 (Jeremy Evans) via ruby-core" <ruby-core@...>
Date:
2025-10-11 03:40:53 UTC
List:
ruby-core #123468
Issue #21446 has been updated by jeremyevans0 (Jeremy Evans).
I found that you don't even need to change the visibility twice. This issue affects all refinement visibility change methods where the method whose visibility is changed by the refinement is in an ancestor of the refined class. Here's a simplified example:
```ruby
class A
private def a
:a
end
end
class B < A
end
module R
refine B do
public :a
end
end
using R
p B.new.a
```
I've submitted a pull request that handles this case: https://github.com/ruby/ruby/pull/14817
----------------------------------------
Bug #21446: StackOverflow when changing visibility in reopened refinement
https://bugs.ruby-lang.org/issues/21446#change-114831
* Author: luke-gru (Luke Gruber)
* Status: Open
* ruby -v: 3.5.0
* Backport: 3.2: REQUIRED, 3.3: REQUIRED, 3.4: REQUIRED
----------------------------------------
```ruby
class A
def a
:a
end
end
class B < A
end
module R
refine B do
private :a
end
end
module R
refine B do
public :a
end
end
using R
B.new.a # StackOverflow
```
I would expect it to change the visibility, not to overflow the stack.
--
https://bugs.ruby-lang.org/
______________________________________________
ruby-core mailing list -- ruby-core@ml.ruby-lang.org
To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/