summaryrefslogtreecommitdiff
path: root/spec/ruby/core/symbol
diff options
context:
space:
mode:
authorJeremy Evans <code@jeremyevans.net>2022-08-10 13:02:19 -0700
committerGitHub <noreply@github.com>2022-08-10 13:02:19 -0700
commitbfa6a8ddc84fffe0aef5a0f91b417167e124dbbf (patch)
treef84003447830d01379d2cfd34329b55e7f773480 /spec/ruby/core/symbol
parentd115a06037e900e1ba29d2293e1d9e4964499ff2 (diff)
Only allow procs created by Symbol#to_proc to call public methods
Fixes [Bug #18826] Co-authored-by: Nobuyoshi Nakada <nobu@ruby-lang.org>
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/6018 Merged-By: jeremyevans <code@jeremyevans.net>
Diffstat (limited to 'spec/ruby/core/symbol')
-rw-r--r--spec/ruby/core/symbol/to_proc_spec.rb27
1 files changed, 27 insertions, 0 deletions
diff --git a/spec/ruby/core/symbol/to_proc_spec.rb b/spec/ruby/core/symbol/to_proc_spec.rb
index 47f2a939ab..81939e0046 100644
--- a/spec/ruby/core/symbol/to_proc_spec.rb
+++ b/spec/ruby/core/symbol/to_proc_spec.rb
@@ -46,6 +46,33 @@ describe "Symbol#to_proc" do
end
end
+ ruby_version_is "3.2" do
+ it "only calls public methods" do
+ body = proc do
+ public def pub; @a << :pub end
+ protected def pro; @a << :pro end
+ private def pri; @a << :pri end
+ attr_reader :a
+ end
+
+ @a = []
+ singleton_class.class_eval(&body)
+ tap(&:pub)
+ proc{tap(&:pro)}.should raise_error(NoMethodError)
+ proc{tap(&:pri)}.should raise_error(NoMethodError)
+ @a.should == [:pub]
+
+ @a = []
+ c = Class.new(&body)
+ o = c.new
+ o.instance_variable_set(:@a, [])
+ o.tap(&:pub)
+ proc{tap(&:pro)}.should raise_error(NoMethodError)
+ proc{o.tap(&:pri)}.should raise_error(NoMethodError)
+ o.a.should == [:pub]
+ end
+ end
+
it "raises an ArgumentError when calling #call on the Proc without receiver" do
-> {
:object_id.to_proc.call