diff options
author | Jeremy Evans <code@jeremyevans.net> | 2022-04-06 19:14:03 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-04-06 19:14:03 -0700 |
commit | 0b091fdac6ceb33b7379ceddc9a49a79d0e158b2 (patch) | |
tree | 3ec9799bb7c38ce87b24380f8008ed07467f48e5 /spec | |
parent | bff12e1a9a726baef8d5d8876669a1506555ec09 (diff) |
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 and rb_tracearg_binding before attempting to
create a binding for the frame.
Fixes [Bug #18487]
Co-authored-by: Alan Wu <XrXr@users.noreply.github.com>
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/5767
Merged-By: jeremyevans <code@jeremyevans.net>
Diffstat (limited to 'spec')
-rw-r--r-- | spec/ruby/optional/capi/binding_spec.rb | 21 |
1 files changed, 15 insertions, 6 deletions
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 |