summaryrefslogtreecommitdiff
path: root/vm_insnhelper.c
diff options
context:
space:
mode:
authorJohn Hawthorn <john@hawthorn.email>2022-06-16 13:28:39 -0700
committerJohn Hawthorn <john@hawthorn.email>2022-06-21 18:33:51 -0700
commita580dd77377c87754b437efb1a02cccc1554dafd (patch)
treed2cbecc9a9617f706b69a9d16a1361ebe7a41bcb /vm_insnhelper.c
parent87a560a0570adf51bd37f9d3da5086db3e3f27a0 (diff)
Don't check protected method ancestry on fcall
If we are making an FCALL, we know we are calling a method on self. This is the same check made for private method visibility, so it should also guarantee we can call a protected method.
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/5643
Diffstat (limited to 'vm_insnhelper.c')
-rw-r--r--vm_insnhelper.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/vm_insnhelper.c b/vm_insnhelper.c
index d2f3fc62bd..248a59f642 100644
--- a/vm_insnhelper.c
+++ b/vm_insnhelper.c
@@ -3749,7 +3749,7 @@ vm_call_method(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_ca
return vm_call_method_each_type(ec, cfp, calling);
case METHOD_VISI_PROTECTED:
- if (!(vm_ci_flag(ci) & VM_CALL_OPT_SEND)) {
+ if (!(vm_ci_flag(ci) & (VM_CALL_OPT_SEND | VM_CALL_FCALL))) {
VALUE defined_class = vm_defined_class_for_protected_call(vm_cc_cme(cc));
if (!rb_obj_is_kind_of(cfp->self, defined_class)) {
vm_cc_method_missing_reason_set(cc, MISSING_PROTECTED);