From c0b1e87c09ab2c4c7c73d194665b3aecb24145d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Chris=20Hasi=C5=84ski?= Date: Thu, 19 Mar 2026 23:11:59 +0100 Subject: [PATCH] Fix attr_reader-generated methods accepting extra arguments attr_reader-generated getter methods silently ignored any arguments passed to them. CRuby raises ArgumentError in this case. Add mrb_get_args(mrb, "") to enforce zero arguments, matching CRuby. --- src/class.c | 1 + test/t/module.rb | 3 +++ 2 files changed, 4 insertions(+) diff --git a/src/class.c b/src/class.c index cc6da75a3..32115ffcc 100644 --- a/src/class.c +++ b/src/class.c @@ -2776,6 +2776,7 @@ mod_attr_define(mrb_state *mrb, mrb_value mod, mrb_value (*accessor)(mrb_state*, static mrb_value attr_reader(mrb_state *mrb, mrb_value obj) { + mrb_get_args(mrb, ""); mrb_value name = mrb_proc_cfunc_env_get(mrb, 0); return mrb_iv_get(mrb, obj, to_sym(mrb, name)); } diff --git a/test/t/module.rb b/test/t/module.rb index 2827f5e27..f2a0e1164 100644 --- a/test/t/module.rb +++ b/test/t/module.rb @@ -163,6 +163,9 @@ assert('Module#attr_reader', '15.2.2.4.13') do AttrTestReader.cattr_val = 'test' assert_equal 'test', AttrTestReader.cattr + + assert_raise(ArgumentError) { attr_instance.iattr(1) } + assert_raise(ArgumentError) { attr_instance.iattr(1, 2, 3) } end assert('Module#attr_writer', '15.2.2.4.14') do