Project

General

Profile

Actions

Bug #21196

closed

Ruby 3.4 ignores visibility when passing arguments using `...`

Added by toy (Ivan Kuchin) 9 days ago. Updated about 22 hours ago.

Status:
Closed
Target version:
-
ruby -v:
ruby 3.4.2 (2025-02-15 revision d2930f8e7a) +PRISM [x86_64-linux]
[ruby-core:121429]

Description

If method is passing arguments using ..., then receiver visibility gets ignored if once called without receiver:

class A
private

  def foo = :foo
  def bar = :bar
end

class B
  def initialize(o)
    @o = o
  end

  def foo(...) = @o.foo(...)
  def bar = @o.bar

  def internal_foo = foo
  def internal_bar = bar
end

def try
  p yield
rescue => e
  p e
end

If foo is called first without receiver through internal_foo:

b = B.new(A.new)

try{ b.internal_foo }
try{ b.internal_bar }
try{ b.foo }
try{ b.bar }

Visibility of A#foo gets ignored:

ruby 3.4.2 (2025-02-15 revision d2930f8e7a) +PRISM [x86_64-linux]
:foo
#<NoMethodError: private method 'bar' called for an instance of A>
:foo
#<NoMethodError: private method 'bar' called for an instance of A>
ruby 3.3.7 (2025-01-15 revision be31f993d7) [x86_64-linux]
#<NoMethodError: private method `foo' called for an instance of A>
#<NoMethodError: private method `bar' called for an instance of A>
#<NoMethodError: private method `foo' called for an instance of A>
#<NoMethodError: private method `bar' called for an instance of A>

If internal_foo is not called before foo:

b = B.new(A.new)

try{ b.foo }
try{ b.bar }

Visibility of A#foo gets checked:

ruby 3.4.2 (2025-02-15 revision d2930f8e7a) +PRISM [x86_64-linux]
#<NoMethodError: private method 'foo' called for an instance of A>
#<NoMethodError: private method 'bar' called for an instance of A>
ruby 3.3.7 (2025-01-15 revision be31f993d7) [x86_64-linux]
#<NoMethodError: private method `foo' called for an instance of A>
#<NoMethodError: private method `bar' called for an instance of A>

Related issues 1 (0 open1 closed)

Has duplicate Ruby - Bug #21125: Kernel is called firstClosedtenderlovemaking (Aaron Patterson)Actions
Actions

Also available in: Atom PDF

Like1
Like0Like0Like1Like0Like0Like0