From 343ea9967e4a6b279eed6bd8e81ad0bdc747f254 Mon Sep 17 00:00:00 2001 From: Jeremy Evans Date: Thu, 17 Feb 2022 10:24:01 -0800 Subject: Raise RuntimeError if Kernel#binding is called from a non-Ruby frame Check whether the current or previous frame is a Ruby frame in call_trace_func before attempting to create a binding for the frame. Fixes [Bug #18487] Co-authored-by: Alan Wu --- spec/ruby/optional/capi/binding_spec.rb | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) (limited to 'spec') diff --git a/spec/ruby/optional/capi/binding_spec.rb b/spec/ruby/optional/capi/binding_spec.rb index 966d650c46..2165705457 100644 --- a/spec/ruby/optional/capi/binding_spec.rb +++ b/spec/ruby/optional/capi/binding_spec.rb @@ -8,12 +8,21 @@ describe "CApiBindingSpecs" do end describe "Kernel#binding" do - it "gives the top-most Ruby binding when called from C" do - foo = 14 - b = @b.get_binding - b.local_variable_get(:foo).should == 14 - b.local_variable_set :foo, 12 - foo.should == 12 + ruby_version_is '3.2' do + it "raises when called from C" do + foo = 14 + -> { @b.get_binding }.should raise_error(RuntimeError) + end + end + + ruby_version_is ''...'3.2' do + it "gives the top-most Ruby binding when called from C" do + foo = 14 + b = @b.get_binding + b.local_variable_get(:foo).should == 14 + b.local_variable_set :foo, 12 + foo.should == 12 + end end end end -- cgit v1.2.3