diff options
author | Jean byroot Boussier <jean.boussier+github@shopify.com> | 2022-12-01 23:32:41 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-12-01 17:32:41 -0500 |
commit | 3d272b0fc822f5c2e9c716377b7fcecf15426b27 (patch) | |
tree | 71b970741b78968c45d9aa5758c616948148ab69 /vm_method.c | |
parent | 9da2a5204f32a4f2ce135fddde2abb6e07d647e9 (diff) |
Module#remove_method: Check frozen on the right object
Previously, the frozen check happened on `RCLASS_ORIGIN(self)`, which
can return an iclass. The frozen check is supposed to respond to objects
that users can call methods on while iclasses are hidden from users.
Other mutation methods like Module#{define_method,alias_method,public}
don't do this. Check frozen status on the module itself.
Fixes [Bug #19164] and [Bug #19166].
Co-authored-by: Alan Wu <XrXr@users.noreply.github.com>
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/6842
Merged-By: XrXr
Diffstat (limited to 'vm_method.c')
-rw-r--r-- | vm_method.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/vm_method.c b/vm_method.c index f1c50b9300..2c5ccdb3d7 100644 --- a/vm_method.c +++ b/vm_method.c @@ -1541,8 +1541,8 @@ remove_method(VALUE klass, ID mid) rb_method_entry_t *me = 0; VALUE self = klass; - klass = RCLASS_ORIGIN(klass); rb_class_modify_check(klass); + klass = RCLASS_ORIGIN(klass); if (mid == object_id || mid == id__send__ || mid == idInitialize) { rb_warn("removing `%s' may cause serious problems", rb_id2name(mid)); } |