summaryrefslogtreecommitdiff
path: root/spec
diff options
context:
space:
mode:
authorJeremy Evans <code@jeremyevans.net>2022-04-06 19:14:03 -0700
committerGitHub <noreply@github.com>2022-04-06 19:14:03 -0700
commit0b091fdac6ceb33b7379ceddc9a49a79d0e158b2 (patch)
tree3ec9799bb7c38ce87b24380f8008ed07467f48e5 /spec
parentbff12e1a9a726baef8d5d8876669a1506555ec09 (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.rb21
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